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 ++)//因为下面的会占有1到12列的格子,故将其他的格子隐藏掉
{
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()函数中的代码即可。
- C#.NET 2003中,如何将DataGrid的表头自由合并,以及多个表头实现
- 合并实现DataGrid多表头
- 合并实现DataGrid多表头
- 合并实现DataGrid多表头
- asp.net GridView多行表头的实现,合并表头
- Flex中DataGrid多表头的实现
- Flex中DataGrid多表头的实现
- DataGrid表头跨行合并的实现
- DataGrid表头跨行合并的实现
- DataGrid表头跨行合并的实现
- ASP.NET中固定DataGrid的表头
- ASP.NET 2.0中合并 GridView 的多表头单元格
- ASP.NET 2.0中合并 GridView 的多表头单元格
- Flex中DataGrid静态多表头的实现
- 实现GridView多表头,表头合并,表头分组,多行支持,使用中发现问题告诉我。
- DataGrid表头合并
- dataGrid 表头合并
- 使用RenderMethod 委托实现DataGrid表头合并
- 一般打印功能的实现
- 微软视频案例中心采用Silverlight开发上线
- MVC模式,你知道多少?
- test
- 陈皓:谈谈职业规划——CSDN对我的采访
- C#.NET 2003中,如何将DataGrid的表头自由合并,以及多个表头实现
- [sql server] 远程连接问题与注意
- 网站测试基本方法-12. 网站性能测试总结
- 如何获取(GET)一杯咖啡——星巴克REST案例分析
- c# windows程序的消息过滤器
- 快速排序
- 背包 锁
- ZOJ 1652 Count the Regions
- MFC实现程序开机自动运行