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

   最近在做的项目包含报表,报表的显示可以用水晶报表的推/拉模式轻松解决,报表的录入这一部分采用的是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次

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值