您的位置:首页 > 其它

GridView显示带有中国式报表表头的方法

2011-11-26 23:50 323 查看
最近在做的项目包含报表,报表的显示可以用水晶报表的推/拉模式轻松解决,报表的录入这一部分采用的是GridView使用模板列进行录入,但用户提出录入页面要和报表的形式一样,但由于报表采用的是中国式表头,比较复杂。刚开始想到用Div做一个固定表头,在表头下面放置隐藏Header的GridView,并通过JS来控制表头的单元宽度随着GV的单元格大小改变的改变而改变,但这样做比较繁琐。后来发现GridView本身就可以设置多层表头。
方法如下:
比如要做如下的报表表头
[图片过宽,建议使用Chrome浏览器]



代码如下:

protected void grvTest1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//第一行表头,从左到右依次数单元格(只数第一行的单元格,不管它跨了几行还是几列)
TableCellCollection tcHeader = targetHeader.Cells;
tcHeader.Clear();
tcHeader.Add(new TableHeaderCell());

tcHeader.Add(new TableHeaderCell());
tcHeader[0].Attributes.Add("rowspan", "3"); //设置单元格属性为竖跨三行
tcHeader[0].Text = "";
tcHeader.Add(new TableHeaderCell());
tcHeader[1].Attributes.Add("rowspan", "3");
tcHeader[1].Text = "编号";
tcHeader.Add(new TableHeaderCell());
tcHeader[2].Attributes.Add("colspan", "3"); //设置单元格属性为横跨三列
tcHeader[2].Text = "占地面积(平方米)";
tcHeader.Add(new TableHeaderCell());
tcHeader[3].Attributes.Add("colspan", "2");
tcHeader[3].Text = "图书(万册)";
tcHeader.Add(new TableHeaderCell());
tcHeader[4].Attributes.Add("colspan", "2");
tcHeader[4].Text = "计算机数(台)";
tcHeader.Add(new TableHeaderCell());
tcHeader[5].Attributes.Add("rowspan", "3");
tcHeader[5].Text = "多媒体教师座位数(个)";
tcHeader.Add(new TableHeaderCell());
tcHeader[6].Attributes.Add("rowspan", "3");
tcHeader[6].Text = "语音实验室座位数(个)";
tcHeader.Add(new TableHeaderCell());
tcHeader[7].Attributes.Add("colspan", "5");
tcHeader[7].Text = "固定资产总值(万元)</th></tr><tr>"; //“</th></tr><tr>”在每一行到最后一个单元格时
// 需要加上这个标记表示换下一行

//第二行表头
tcHeader.Add(new TableHeaderCell());
tcHeader[8].Attributes.Add("rowspan", "2");
tcHeader[8].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[9].Attributes.Add("colspan", "2");
tcHeader[9].Text = "其中:";
tcHeader.Add(new TableHeaderCell());
tcHeader[10].Attributes.Add("rowspan", "2");
tcHeader[10].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[11].Attributes.Add("rowspan", "2");
tcHeader[11].Text = "其中:当年新增";
tcHeader.Add(new TableHeaderCell());
tcHeader[12].Attributes.Add("rowspan", "2");
tcHeader[12].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[13].Attributes.Add("rowspan", "2");
tcHeader[13].Text = "其中:教学用计算机";
tcHeader.Add(new TableHeaderCell());
tcHeader[14].Attributes.Add("rowspan", "2");
tcHeader[14].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[15].Attributes.Add("colspan", "2");
tcHeader[15].Text = "其中:教学、科研仪器设备资产值";
tcHeader.Add(new TableHeaderCell());
tcHeader[16].Attributes.Add("colspan", "2");
tcHeader[16].Text = "其中:信息化设备资产值</th></tr><tr>";

//第三行表头
tcHeader.Add(new TableHeaderCell());
tcHeader[17].Text = "绿化用地面积";
tcHeader.Add(new TableHeaderCell());
tcHeader[18].Text = "运动场地面积";
tcHeader.Add(new TableHeaderCell());
tcHeader[19].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[20].Text = "其中:当年新增";
tcHeader.Add(new TableHeaderCell());
tcHeader[21].Text = "计";
tcHeader.Add(new TableHeaderCell());
tcHeader[22].Text = "其中:软件<th></tr><tr>";

//第四行表头
tcHeader.Add(new TableHeaderCell()); ;
tcHeader[23].Text = "甲";
tcHeader.Add(new TableHeaderCell());
tcHeader[24].Text = "乙";
for (int i = 25; i <= 38; i++)
{
tcHeader.Add(new TableHeaderCell());
tcHeader[i].Text = (i - 24).ToString();
}
}
}


运行效果如下:
[图片过宽,建议使用Chrome浏览器]



注意:在设值第一行第一列的单元格属性为N的话,那么“</th></tr><tr>"出现的次数应该也为N次
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: