当前位置:编程学习 > C#/ASP.NET >>

datatable 查询出来之后 怎么对有相同的列进行合并

就是如果有两行三列 
其中两行中的第一列值都相同 
怎么把它合并起来
并绑定到repeter中 --------------------编程问答-------------------- 先绑定,再在前台用js处理合并 --------------------编程问答-------------------- 合并方法:
 public static void UnitRow(GridView gv, int columnIndex, string lblName)
        {
            int i;
            string lastType;
            int lastCell;
            if (gv.Rows.Count > 0)
            {
                lastType = (gv.Rows[0].Cells[columnIndex].FindControl(lblName) as Label).Text;
                gv.Rows[0].Cells[columnIndex].RowSpan = 1;
                lastCell = 0;
                for (i = 1; i < gv.Rows.Count; i++)
                {
                    if ((gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text == lastType)
                    {
                        gv.Rows[i].Cells[columnIndex].Visible = false;
                        gv.Rows[lastCell].Cells[columnIndex].RowSpan++;
                    }
                    else
                    {
                        lastType = (gv.Rows[i].Cells[columnIndex].FindControl(lblName) as Label).Text;
                        lastCell = i;
                        gv.Rows[i].Cells[columnIndex].RowSpan = 1;
                    }
                }
            }
        }

调用合并方法,用gridview中的RowDataBound事件
 MyGrvTestPrj.UnitRow(GridView1, 0, "XX");
GridView1--要绑定的gridview  0--是要合并的列
xx---根据那个字段为合并基准,例如:下面是以订单号为基准

 <asp:TemplateField HeaderText="订单号" ItemStyle-HorizontalAlign="Left" HeaderStyle-Width="60px">
                    <ItemTemplate>
                        <a style="color: Blue; cursor: pointer" onclick="GoUserRole('<%# Eval("OrderNo") %>')">
                            <asp:Label ID="XX" runat="server" Text='<%#Eval("OrderNo")%>'></asp:Label>
                        </a>
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Left"></ItemStyle>
                </asp:TemplateField> --------------------编程问答-------------------- 建议动态构建html --------------------编程问答--------------------

        public Bitmap MergerImg(Bitmap[] maps, System.Web.UI.WebControls.RepeatDirection RepeatDirection)
        {
            if (maps.Length == 0)
                throw new Exception("图片数不能够为0");

            int _width = 0;
            int _height = 0;
            for (int i = 0; i < maps.Length; i++)
            {
                if (RepeatDirection == System.Web.UI.WebControls.RepeatDirection.Horizontal)
                {
                    _width += maps[i].Width;
                    if (maps[i].Height > _height)
                    {
                        _height = maps[i].Height;
                    }
                }
                else
                {
                    _height += maps[i].Height;
                    if (maps[i].Width > _width)
                    {
                        _width = maps[i].Width;
                    }
                }
            }
            //创建要显示的图片对象,根据参数的个数设置宽度
            Bitmap backgroudImg = new Bitmap(_width, _height);
            Graphics g = Graphics.FromImage(backgroudImg);

            //清除画布,背景设置为白色
            int len = maps.Length;
            g.Clear(System.Drawing.Color.White);
            int x = 0;
            for (int j = 0; j < len; j++)
            {
                if (RepeatDirection == System.Web.UI.WebControls.RepeatDirection.Horizontal)
                {
                    g.DrawImage(maps[j], x, 0, maps[j].Width, maps[j].Height);
                    x = x + maps[j].Width;
                }
                else
                {
                    g.DrawImage(maps[j], 0, x, maps[j].Width, maps[j].Height);
                    x = x + maps[j].Height;
                }
            }
            g.Dispose();
            return backgroudImg;
        }


        protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName)
        {
            //合并列
            DataTable ndt1 = dt1.Copy();
            DataTable ndt2 = dt2.Copy();
            ndt1.PrimaryKey = new DataColumn[] { ndt1.Columns[KeyColName] };
            ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
            for (int i = 0; i < ndt2.Columns.Count; i++)
            {
                if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                {
                    ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
                }
            }

            //合并相同主键的数据
            for (int i = 0; i < ndt1.Rows.Count; i++)
            {
                DataRow inrow=ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
                if (inrow != null)
                {
                    for (int j = 0; j < ndt2.Columns.Count; j++)
                    {
                        if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                        {
                            ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
                        }
                    }
                    ndt2.Rows.Remove(inrow);
                }
            }
            //合并不同主键的数据
            for (int i = 0; i < ndt2.Rows.Count; i++)
            {
                DataRow row = ndt1.NewRow();
                for (int j = 0; j < ndt2.Columns.Count; j++)
                {
                   row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
                }
                ndt1.Rows.Add(row);
            }
            return ndt1;
        }
--------------------编程问答-------------------- 前边发错了


        protected DataTable MergeDataTable(DataTable dt1, DataTable dt2, string KeyColName)
        {
            //合并列
            DataTable ndt1 = dt1.Copy();
            DataTable ndt2 = dt2.Copy();
            ndt1.PrimaryKey = new DataColumn[] { ndt1.Columns[KeyColName] };
            ndt2.PrimaryKey = new DataColumn[] { ndt2.Columns[KeyColName] };
            for (int i = 0; i < ndt2.Columns.Count; i++)
            {
                if (ndt2.Columns[i].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                {
                    ndt1.Columns.Add(ndt2.Columns[i].ColumnName);
                }
            }

            //合并相同主键的数据
            for (int i = 0; i < ndt1.Rows.Count; i++)
            {
                DataRow inrow=ndt2.Rows.Find(ndt1.Rows[i][KeyColName]);
                if (inrow != null)
                {
                    for (int j = 0; j < ndt2.Columns.Count; j++)
                    {
                        if (ndt2.Columns[j].ColumnName.ToLower().Trim() != KeyColName.ToLower().Trim())
                        {
                            ndt1.Rows[i][ndt2.Columns[j].ColumnName] = inrow[ndt2.Columns[j].ColumnName];
                        }
                    }
                    ndt2.Rows.Remove(inrow);
                }
            }
            //合并不同主键的数据
            for (int i = 0; i < ndt2.Rows.Count; i++)
            {
                DataRow row = ndt1.NewRow();
                for (int j = 0; j < ndt2.Columns.Count; j++)
                {
                   row[ndt2.Columns[j].ColumnName] = ndt2.Rows[i][ndt2.Columns[j].ColumnName];
                }
                ndt1.Rows.Add(row);
            }
            return ndt1;
        }
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,