关于GridView 合并列的问题?

jack15850798154 2011-10-24 12:51:30
表中数据如下:
编号 客户名称 部门
1 A A1
2 A A2
3 A A3
4 B B1
5 C C1
6 C C2
7 D D1

想要的效果是 通过客户名称分组 合并同一客户名称 下面的相同列!谢谢!

实现效果如:

编号 客户名称 部门
1 A1
2 A A2
3 A3
4 B B1
5 C C1
6 C2
7 D D1

-客户名称实现合并后最好能够居中!
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2011-10-31
  • 打赏
  • 举报
回复
vs2005:

protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string[] cols = { "编号", "客户名称", "部门" };
object[][] testdata = new object[][]{
new object[] {1, "A", "A1"},
new object[] {2, "A", "A2"},
new object[] {3, "A", "A3"},
new object[] {4, "B", "B1"},
new object[] {5, "C", "C1"},
new object[] {6, "C", "C2"},
new object[] {7, "D", "D1"}
};
foreach (string c in cols)
dt.Columns.Add(new DataColumn(c));
foreach (object[] row in testdata)
dt.Rows.Add(row);

GridView gv = new GridView();
Page.Form.Controls.Add(gv);
gv.DataSource = dt;
gv.DataBind();

MergeColumnCells(gv, 1, null);
}

public delegate bool Mergable(TableCell c1, TableCell c2);

public void MergeColumnCells(GridView gv, int colIndex, Mergable mergable)
{
Mergable _mergable = delegate(TableCell c1, TableCell c2) { return c1.Text == c2.Text; };
mergable = mergable ?? _mergable;

int span = 1;
for (int i = gv.Rows.Count-1; i >= 0; i--)
{
TableCell c = gv.Rows[i].Cells[colIndex];
if (i > 0 && mergable(c, gv.Rows[i - 1].Cells[colIndex]))
{
c.Visible = false;
span++;
}
else
{
c.RowSpan = span;
c.Style.Value = "vertical-align: middle; text-align: center";
span = 1;
}
}
}
jshi123 2011-10-26
  • 打赏
  • 举报
回复

protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
string[] cols = {"编号", "客户名称", "部门"};
object[][] testdata = {
new object[] {1, "A", "A1"},
new object[] {2, "A", "A2"},
new object[] {3, "A", "A3"},
new object[] {4, "B", "B1"},
new object[] {5, "C", "C1"},
new object[] {6, "C", "C2"},
new object[] {7, "D", "D1"}
};
dt.Columns.AddRange(cols.Select(c => new DataColumn(c)).ToArray());
foreach (var row in testdata)
dt.Rows.Add(row);

GridView gv = new GridView();
Page.Form.Controls.Add(gv);
gv.DataSource = dt;
gv.DataBind();

MergeColumnCells(gv, 1);
}

public void MergeColumnCells(GridView gv, int colIndex, Func<TableCell, TableCell, bool> mergable = null)
{
mergable = mergable ?? (Func<TableCell, TableCell, bool>)((c1, c2) => c1.Text == c2.Text);

var cells = gv.Rows.Cast<GridViewRow>().Select(r => r.Cells[colIndex]).Reverse().ToList();
int span = 1, i=0;
cells.ForEach(c =>
{
if (i < cells.Count-1 && mergable(c, cells[++i]))
{
c.Visible = false;
span++;
}
else
{
c.RowSpan = span;
c.Style.Value = "vertical-align: middle; text-align: center";
span = 1;
}
});
}
LOVE_GG 2011-10-25
  • 打赏
  • 举报
回复
楼主,你看看你的合并效果图,能看懂吗?你表述清楚一点吧,你那个效果图,真看不懂
khary 2011-10-25
  • 打赏
  • 举报
回复
这个要加上子列的内容,可以实现,但比较麻烦,最后看看你源码是怎样的
baipeifa 2011-10-24
  • 打赏
  • 举报
回复
你表达得不清楚!

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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