C#.NET 2003中,如何将DataGrid的表头自由合并,以及多个表头实现

来源:互联网 发布:teambition软件下载 编辑:程序博客网 时间:2024/05/17 21:55

1、合并效果:

表头合并效果

 

2、实现方法:

 

 

1)、首先在前台设计过程中仍然按照一般绑定DataGrid的方法设计(此处可以称之为障眼法,实际效果会在后台定义),如下图:前台设计原始效果

 

 

2)先说说“合并效果”中的“红框区域表头”的实现方法(有两种):

       方法一:

 

在前台中,为DataGrid增加一个ItemCreated事件。在后台的ItemCreated响应函数中加入以下代码:

 

private void DGTargetModify_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)

{

     if(e.Item.ItemType == ListItemType.Header )

     {

         this.HeadText.Visible = false;

         DateTime DT = Convert.ToDateTime(Session["SearchDate"].ToString());

 

         TableCellCollection tcl = e.Item.Cells;//获取表头实例

         tcl.Clear();//清除原有控件


         tcl.Add(new TableHeaderCell());//添加表头控件

         tcl[0].ColumnSpan=13;

         tcl[0].HorizontalAlign= HorizontalAlign.Center;

         string TmpTd = null;

         TmpTd = "#5#6机组脱硫运行参数日报表</td></tr>";//此处,在导出Excel的功能中为需要修改部分。

         TmpTd += "<tr valign=middle height=40pt><td colspan=6 style=COLOR:#800000;FONT-SIZE:13pt;FONT-FAMILY:华文楷体 align=left>x x x x发电厂</td>";

         TmpTd += "<td style=COLOR:#800000;FONT-SIZE:13pt;FONT-FAMILY:华文楷体 colspan=7 align=right>时间:" +  DT.Year.ToString("0000") + "";

         TmpTd += DT.Month.ToString("00") + "" + DT.Day.ToString("00") + "</td></tr>";

         TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td rowspan=4 bgcolor=skyblue>机组</td>";

         TmpTd += "<td colspan=12 bgcolor=skyblue style=FONT-SIZE:13pt>               </td></tr>";

         TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td colspan=2 bgcolor=skyblue>脱硫停运时间</td><td colspan=2 bgcolor=skyblue>运行期间进口SO2平均排放浓度</td>";

         TmpTd += "<td colspan=2 bgcolor=skyblue>运行期间出口SO2平均排放浓度</td><td colspan=2 bgcolor=skyblue>平均脱硫效率</td><td colspan=2 bgcolor=skyblue>脱硫同步投运率</td>";

         TmpTd += "<td colspan=2 bgcolor=skyblue>旁路挡板平均开度</td></tr>";

         TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td bgcolor=skyblue>本日</td><td bgcolor=skyblue>本年</td>";

         TmpTd += "<td bgcolor=skyblue>本日</td><td bgcolor=skyblue>本年</td><td bgcolor=skyblue>本日</td><td bgcolor=skyblue>本年</td><td bgcolor=skyblue>本日</td>";

         TmpTd += "<td bgcolor=skyblue>本年</td><td bgcolor=skyblue>本日</td><td bgcolor=skyblue>本年</td><td bgcolor=skyblue>开度</td><td bgcolor=skyblue>时间</td></tr>";

         TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td colspan=2 bgcolor=skyblue>h</td><td colspan=4 bgcolor=skyblue>mg/Nm3</td>";

         TmpTd += "<td bgcolor=skyblue colspan=2>%</td><td bgcolor=skyblue colspan=2>%</td><td bgcolor=skyblue colspan=1>%</td><td bgcolor=skyblue colspan=1>h";//表头样式的设计默认是开头提供<tr><td>,结尾提供</td></tr>

         tcl[0].Text = TmpT;

}

}

方法二:

       在前台中,为DataGrid增加一个ItemDataBound事件。在后台的ItemDataBound响应函数中加入方法一中的代码即可。

 

3)下面说说“合并效果”中的“蓝框区域表头”的实现方法(此处作者称之为“偷龙转凤”,有两种):

a、准备工作:

       在后台绑定DataGrid之前,在你需要加表头的那一行添加一个DataRow,具体代码如下:

#region 添加一个标题行

     DataRow SubTitle = TmpTable.NewRow();

     SubTitle["Expr0"] = 1111;//标题行标记,后面处理的时候用到,第0列的值格式定义为int型了

     for(i = 1; i <= 12; i ++)//其他的12列,填充值

     {

         SubTitle["Expr"+i] = 0.0;//随便给值,后面处理过程中会将其隐去,单元格的值格式在前面定义了为double型,具体使用时要注意,如你定义为string型,则需要给定string型的值。

     }

     TmpTable.Rows.Add(SubTitle);//将标题行插入到绑定数据源的Table中。

#endregion

b、标题行转换(“偷龙转凤”阶段,有三种方法):

方法一:

       DataGrid绑定之后加一段函数,如下:

this.DGTargetModify.DataSource = TmpTable; //定义绑定的数据源

his.DGTargetModify.DataBind();//绑定

this.MissedModify();//绑定后添加的函数,转换部分

       其中的MissedModify()函数定义如下:

private void MissedModify()

{

     #region 设置第二个标题

     foreach(DataGridItem DGI in this.DGTargetModify.Items)

     {

         string strTimeSpan = DGI.Cells[0].Text;

         if(DGI.Cells[0].Text.StartsWith("1111"))//子标题行的标记,“偷龙”

         {

              DGI.Cells[0].ColumnSpan = 13;

              for(int i = 1;i < 13; i ++)//因为下面的会占有112列的格子,故将其他的格子隐藏掉

              {

                   DGI.Cells[i].Visible = false;

              }

              string TmpTd = null;

              TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td rowspan=4 bgcolor=skyblue>机组</td>";

              TmpTd += "<td colspan=12 bgcolor=skyblue style=FONT-SIZE:13pt>               </td></tr>";

              TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td rowspan=3 bgcolor=skyblue>浆液PH</td><td colspan=2 bgcolor=skyblue>引风机开度</td>";

              TmpTd += "<td colspan=2 bgcolor=skyblue>增压风机</td><td colspan=3 bgcolor=skyblue>浆液循环泵电流</td><td colspan=2 bgcolor=skyblue>浆液密度</td>";

              TmpTd += "<td colspan=2 bgcolor=skyblue>差压</td></tr>";

              TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td bgcolor=skyblue>A</td><td bgcolor=skyblue>B</td>";

              TmpTd += "<td bgcolor=skyblue>电流</td><td bgcolor=skyblue>开度</td><td bgcolor=skyblue>A</td><td bgcolor=skyblue>B</td><td bgcolor=skyblue>C</td>";

              TmpTd += "<td bgcolor=skyblue>石灰石</td><td bgcolor=skyblue>石膏</td><td bgcolor=skyblue>GGH</td><td bgcolor=skyblue>除雾器</td></tr>";

              TmpTd += "<tr style=FONT-WEIGHT:bold align=center><td colspan=2 bgcolor=skyblue>%</td><td bgcolor=skyblue>A</td><td bgcolor=skyblue>%</td>";

              TmpTd += "<td bgcolor=skyblue colspan=3>A</td><td bgcolor=skyblue colspan=2>kg/m3</td><td bgcolor=skyblue colspan=2>Pa</td></tr>";

              DGI.Cells[0].Text = TmpTd; // “转凤”

         }

     }

     #endregion

}

方法二:

     在前台中,为DataGrid增加一个ItemCreated事件。在后台的ItemCreated响应函数中加入方法一中的MissedModify()函数中的代码即可。

方法三:

       在前台中,为DataGrid增加一个ItemDataBound事件。在后台的ItemDataBound响应函数中加入方法一中的MissedModify()函数中的代码即可。

 

 

 

 

 

 

 

 

原创粉丝点击