跨多列,多行表头的DataGrid

来源:互联网 发布:数据库理论试题及答案 编辑:程序博客网 时间:2024/04/20 23:33
 在网上搜索了半天,有以下几个方法:

1. 孟子E章的 ()
    隐藏DataGrid的表头,在DataGrid的上放画一个多行表头.
    不方便的地方是::
    a. 对齐表头与DataGrid各列,有点麻烦.
    b. 如果我要把DataGrid(表头形式,数据内容)导进Excel,则不会看到多行表头(多行表头这里不属于DataGrid)
     
2. 直接更改DataGrid的表头样式
   
3.使用RenderMethod委托可以实现DataGrid表头的合并,DataGrid的表头转化为用Table来控制
   请参照:http://terrylee.cnblogs.com/archive/2005/09/29/246576.aspx
  
/// <summary>
        
/// 创建Item
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>

        private void DataGrid_Total_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
{
            
//将Item的呈现方法定向到自定义的呈现方法上
            ListItemType lit = e.Item.ItemType;
            
if(ListItemType.Header == lit)
            
{
                e.Item.SetRenderMethodDelegate(
new RenderMethod(NewRenderMethod));
            }


        }


        
/// <summary>
        
/// 自定义的Item呈现方法
        
/// </summary>
        
/// <param name="writer"></param>
        
/// <param name="ctl"></param>

        private void NewRenderMethod(HtmlTextWriter writer,Control ctl)
        
{
            
//不需要从<TR>标签开始

            
//第一列"表号",必须有rowspan属性
            TableCell cell1 = (TableCell)ctl.Controls[0];
            cell1.Attributes.Add(
"rowspan","2");
            cell1.Attributes.Add(
"align","center");
            cell1.RenderControl(writer);
            
//输出“电度表”列
            writer.Write("<TD colspan=/"4/"  rowspan=/"1/" align=/"center/">电度表</TD>/n");
            
            
//“月末核算(度)”列必须有rowspan属性
            TableCell cell = (TableCell)ctl.Controls[ctl.Controls.Count - 1];
            cell.Attributes.Add(
"rowspan","2");
            cell.Attributes.Add(
"align","center");
            cell.RenderControl(writer);

            
//现在关闭第一行
            writer.Write("</TR>/n");

            
//将设计时的样式属性添加到第二行使得两行的外观相似
            this.DataGrid_Total.HeaderStyle.AddAttributesToRender(writer);

            
//插入第二行
            writer.RenderBeginTag("TR");

            
//呈现除了最后一列(刚才已经呈现过了)外的所有在设计时定义的cells
            for(int i=1;i<=ctl.Controls.Count-2;i++)
            
{
                ctl.Controls[i].RenderControl(writer);
            }


            
//不需要以</TR>结束
        }

文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕37周翻身困难怎么办 晚上睡不好白天犯困怎么办 抑郁症又不想起床了怎么办 儿童憋尿功能太差怎么办 一个月的宝宝睡眠不好怎么办 被商场要求撤场怎么办 上班没法接孩子放学怎么办 幼儿下午放学与上班错开怎么办 宝宝早上醒的早怎么办 晚卜睡不着尿多怎么办 要求正常休息公司不准怎么办 我早起被室友说怎么办? 小孩晚上睡的晚怎么办 初中一年级学不扎实怎么办 一年级学生上课爱说话怎么办 孩子不按时完成作业怎么办 高三理科基础不好怎么办 字写快了就难看怎么办 高一文科280分怎么办 高三了学不进去怎么办 副职兼任法人不够条件怎么办 正职和上级不和副职怎么办 中层正职和上级不和副职怎么办 陆军军官年龄大了怎么办 ps选区选多了怎么办 香港货物被海关扣了怎么办 羽绒服棉填充物不均匀了怎么办 蛀牙到牙神经了怎么办 t恤袖子长了怎么办 t恤袖子短了怎么办 ofo突然要交押金余款怎么办 裙子的腰小了怎么办 白衬衣棉质变软怎么办? 车被自行车刮了怎么办 刮花别人的车门怎么办 破腹产九个月意外怀孕怎么办 破腹产一年半意外怀孕怎么办 37天流产了该怎么办 旧鞋穿着磨脚了怎么办 皮鞋磨脚怎么办小窍门 拉链从下面开了怎么办