为什么我合并信息相同的行后,后面会多一列

yghuaa 2013-06-03 10:02:45
实现效果如图


实现的代码如下:
public static void GroupItemTemplate(GridView GridView1,int cols)
{
if(GridView1.Rows.Count<1||cols>GridView1.Rows[0].Cells.Count-1)
{
return;
}
Label lbl1 = (Label)GridView1.Rows[0].Cells[cols].FindControl("lblITname");

TableCell oldTc = GridView1.Rows[0].Cells[cols];
for (int i = 1; i < GridView1.Rows.Count;i++ )
{
TableCell tc = GridView1.Rows[i].Cells[cols];

Label lbl2 = (Label)GridView1.Rows[i].Cells[cols].FindControl("lblITname");
if (lbl1.Text == lbl2.Text)
{


lbl2.Visible = false;

if (oldTc.RowSpan == 0)
{
oldTc.RowSpan = 1;


}
oldTc.RowSpan++;

}
else
{
lbl1 = lbl2;
oldTc = tc;

}
}
}
...全文
332 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
md5e 2013-06-03
  • 打赏
  • 举报
回复
你在玩我吗? 第一行合并是2 第二行合并是3 第三行合并是4 ..... if (lbl1.Text == lbl2.Text) { oldTc.Visible = false; rowSpanNum++; } else{ oldTc.RowSpan= rowSpanNum; rowSpanNum = 1; }
yghuaa 2013-06-03
  • 打赏
  • 举报
回复
引用 5 楼 liuchaolin 的回复:
应该是 oldTc.RowSpan = 1;这个的问题吧 gvr.Cells[McellNum].RowSpan = rowSpanNum;,与向下合并多少个,就应该是几,而不是1
我这里是有判断的 if (oldTc.RowSpan == 0) { oldTc.RowSpan = 1; } oldTc.RowSpan++;
md5e 2013-06-03
  • 打赏
  • 举报
回复
应该是 oldTc.RowSpan = 1;这个的问题吧 gvr.Cells[McellNum].RowSpan = rowSpanNum;,与向下合并多少个,就应该是几,而不是1
yghuaa 2013-06-03
  • 打赏
  • 举报
回复
yghuaa 2013-06-03
  • 打赏
  • 举报
回复
引用 2 楼 ITX2000 的回复:
[quote=引用 1 楼 liuchaolin 的回复:]
合并行的代码不是有很多吗?

/// <summary>
/// 合并GridView中某列相同信息的行(单元格)
/// </summary>
/// <param name="GridView1">GridView</param>
/// <param name="cellNum">比对列集</param>
/// <param name="McellNum">合并的列</param>
/// <param name="_color">两行间隔色</param>
protected static void GroupRows(GridView gv, int[] CcellNum, int McellNum, string[] _color)
{
int i = 0, rowSpanNum = 1;
int j = 0;

while (i < gv.Rows.Count - 1)
{
GridViewRow gvr = gv.Rows[i];
gvr.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]);
for (i=i+1; i < gv.Rows.Count; i++)
{
GridViewRow gvrNext = gv.Rows[i];
bool flang = true;
for (int c = 0; c < CcellNum.Length; c++)
{
if (gvr.Cells[c].Text.Trim() != gvrNext.Cells[c].Text.Trim())
{
flang = false;
break;
}
}
if (flang)
{
gvrNext.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]);
//gvrNext.Cells[cellNum].Visible = false;
gvrNext.Cells[McellNum].Visible = false;
rowSpanNum++;
}
else
{
gvr.Cells[McellNum].RowSpan = rowSpanNum;
rowSpanNum = 1;
j++;
break;
}

if (i == gv.Rows.Count - 1)
{
gvr.Cells[McellNum].RowSpan = rowSpanNum;
}
}
}
}


不是啊 ,我合并的这一列是 <asp:TemplateField>模板列,需要比对的是里面Lable的值
<asp:TemplateField HeaderText="IT Server Desk">
<ItemTemplate >

<asp:Label ID="lblITname" runat="server" Text='<%#Eval("username2")%>'></asp:Label>

</ItemTemplate>
</asp:TemplateField>

然后我写的后台代码如上,可是后面会莫名其妙出现一列[/quote]
yghuaa 2013-06-03
  • 打赏
  • 举报
回复
引用 1 楼 liuchaolin 的回复:
合并行的代码不是有很多吗? /// <summary> /// 合并GridView中某列相同信息的行(单元格) /// </summary> /// <param name="GridView1">GridView</param> /// <param name="cellNum">比对列集</param> /// <param name="McellNum">合并的列</param> /// <param name="_color">两行间隔色</param> protected static void GroupRows(GridView gv, int[] CcellNum, int McellNum, string[] _color) { int i = 0, rowSpanNum = 1; int j = 0; while (i < gv.Rows.Count - 1) { GridViewRow gvr = gv.Rows[i]; gvr.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]); for (i=i+1; i < gv.Rows.Count; i++) { GridViewRow gvrNext = gv.Rows[i]; bool flang = true; for (int c = 0; c < CcellNum.Length; c++) { if (gvr.Cells[c].Text.Trim() != gvrNext.Cells[c].Text.Trim()) { flang = false; break; } } if (flang) { gvrNext.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]); //gvrNext.Cells[cellNum].Visible = false; gvrNext.Cells[McellNum].Visible = false; rowSpanNum++; } else { gvr.Cells[McellNum].RowSpan = rowSpanNum; rowSpanNum = 1; j++; break; } if (i == gv.Rows.Count - 1) { gvr.Cells[McellNum].RowSpan = rowSpanNum; } } } }
不是啊 ,我合并的这一列是 <asp:TemplateField>模板列,需要比对的是里面Lable的值 <asp:TemplateField HeaderText="IT Server Desk"> <ItemTemplate > <asp:Label ID="lblITname" runat="server" Text='<%#Eval("username2")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> 然后我写的后台代码如上,可是后面会莫名其妙出现一列
md5e 2013-06-03
  • 打赏
  • 举报
回复
合并行的代码不是有很多吗? /// <summary> /// 合并GridView中某列相同信息的行(单元格) /// </summary> /// <param name="GridView1">GridView</param> /// <param name="cellNum">比对列集</param> /// <param name="McellNum">合并的列</param> /// <param name="_color">两行间隔色</param> protected static void GroupRows(GridView gv, int[] CcellNum, int McellNum, string[] _color) { int i = 0, rowSpanNum = 1; int j = 0; while (i < gv.Rows.Count - 1) { GridViewRow gvr = gv.Rows[i]; gvr.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]); for (i=i+1; i < gv.Rows.Count; i++) { GridViewRow gvrNext = gv.Rows[i]; bool flang = true; for (int c = 0; c < CcellNum.Length; c++) { if (gvr.Cells[c].Text.Trim() != gvrNext.Cells[c].Text.Trim()) { flang = false; break; } } if (flang) { gvrNext.BackColor = System.Drawing.ColorTranslator.FromHtml(_color[j % 2]); //gvrNext.Cells[cellNum].Visible = false; gvrNext.Cells[McellNum].Visible = false; rowSpanNum++; } else { gvr.Cells[McellNum].RowSpan = rowSpanNum; rowSpanNum = 1; j++; break; } if (i == gv.Rows.Count - 1) { gvr.Cells[McellNum].RowSpan = rowSpanNum; } } } }
happytonice 2013-06-03
  • 打赏
  • 举报
回复
for (int i = gridview1.Rows.Count - 1; i > 0; i--) { if (gridview1.Rows[i].RowType == DataControlRowType.DataRow) { TableCell tCell = gridview1.Rows[i].Cells[2]; TableCell tCell_previous = gridview1.Rows[i - 1].Cells[2]; tCell.RowSpan = (tCell.RowSpan == 0) ? 1 : tCell.RowSpan; tCell_previous.RowSpan = (tCell_previous.RowSpan == 0) ? 1 : tCell_previous.RowSpan; if (tCell.Text.Trim() == tCell_previous.Text.Trim()) { tCell.Visible = false; tCell_previous.RowSpan += tCell.RowSpan; } } } 一个合并gridview的。
yghuaa 2013-06-03
  • 打赏
  • 举报
回复
引用 7 楼 liuchaolin 的回复:
你在玩我吗? 第一行合并是2 第二行合并是3 第三行合并是4 ..... if (lbl1.Text == lbl2.Text) { oldTc.Visible = false; rowSpanNum++; } else{ oldTc.RowSpan= rowSpanNum; rowSpanNum = 1; }
不好意思啦,我是不理解,很感谢你的提示。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧