GridView中的多重表头及合计行
GridView是一个比较好的展示数据的控件,数据可以非常简单的绑定到表格,几乎不用编太多程,但是如果要展示的数据表外形上需要多行表头,或者合计行,就需要另外处理一下了:
一、多行表头需要重载GridView的OnRowCreated事件:
一、多行表头需要重载GridView的OnRowCreated事件:
1
protected void gvMain_RowCreated(object sender, GridViewRowEventArgs e)
2
{
3
if (e.Row.RowType == DataControlRowType.Header)
4
{//判断创建的行是不是标题行
5
TableCellCollection tcl = e.Row.Cells;
6
//清除自动生成的表头
7
tcl.Clear();
8
//添加新的表头
9
tcl.Add(new TableHeaderCell());
10
tcl[0].RowSpan = 2;
11
tcl[0].Text = "标题s";
12
Label l1 = new Label();
13
l1.Text = "uu";
14
Button bt = new Button();
15
bt.Text = "1";
16
//因为自定义表头,所以原来系统中实现的排序功能就失效了
17
//下面语句可以自己在表头中添加控件,自己实现排序功能
18
tcl[0].Controls.Add(l1);
19
tcl[0].Controls.Add(bt);
20
tcl.Add(new TableHeaderCell());
21
tcl[1].ColumnSpan = 2;
22
tcl[1].Text = "标题2";
23
tcl.Add(new TableHeaderCell());
24
tcl[2].RowSpan = 2;
25
tcl[2].Text = "标题3";
26
tcl.Add(new TableHeaderCell());
27
tcl[3].ColumnSpan = 3;
28
tcl[3].Text = "标题4";
29
tcl.Add(new TableHeaderCell());
30
tcl[4].RowSpan = 2;
31
//这段是重点 其实在生成的html中tcl[4]转化为<th>标题5</th>,所以依照该原则注入html标签来实现,原理有些类似于SQL注入攻击
32
tcl[4].Text = "标题5</th></tr><tr><th>标题2-1</th><th>标题2-2</th><th>标题4-1</th><th>标题4-2</th><th>标题4-3";
33
}
34
}
35![](/Images/OutliningIndicators/None.gif)
二、合计用FooterRow实现,可以在数据绑定后来实现,或者在RowCreated事件中应该也能做(偷懒没试),下面是在绑定后单独做的,方法很简单,没有考虑效率和设计结构的问题:![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
35
![](/Images/OutliningIndicators/None.gif)
1
private void AddTotle(GridView gv,DataSet ds,int pos, int start)
2
{
3
long count=0;
4
if (gv.FooterRow == null)
5
return;
6
gv.FooterRow.Cells[pos].Text = "合计";
7
for (int i = start; i < ds.Tables[0].Columns.Count-1; i++)
8
{
9
count = 0;
10
for (int j = 0; j < ds.Tables[0].Rows.Count; j++)
11
{
12
count += int.Parse(ds.Tables[0].Rows[j][i].ToString());
13
}
14
gv.FooterRow.Cells[i].Text = count.ToString();
15
}
16
}
其中ds是数据表,在算合计的时候需要遍历整个表;pos是需要显示“合计”二字的GridView控件的列索引;start是需要做合计计算的数据集(DataSet控件)起始列索引,默认是一直算到倒数第二列(最后一列不做合计)。
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)