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