GridView合并表头多重表头

最近在工作中遇到一个要合并表头的统计报表:下面是实现代码,刚开始我以为同合并Table一样,没想到GridView是按每行顺序来的,只在每行要进合并的地方做改变。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.IO;

public partial class web_hr_kaoqin_report_ChuChaiStatistic : System.Web.UI.Page
{
private string selectstr = null;
private string searchName = "select [姓名],[员工编码],[部门],[开始日期],[终止日期] from [WEC].[KaoQin].[请假表] where [姓名] like '%'+@wherestr+'%'";
// private string searchTimeStartEnd = "select top 10 [姓名],[员工编码],[部门] from [请假表] where [开始日期]>=@startdate and [终止日期]<=@enddate";
private string searchBmName = "select [姓名],[员工编码],[部门] from [WEC].[KaoQin].[请假表] where [部门]=@wherestr";
// private string searchXmName = "select select top 10 [姓名],[员工编码],[部门] from [请假表]";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BmName();
Bind();
}
}
private void BmName()
{
string sqlbm = "select [部门名称] from [WEC].[HR].[部门]";
DataTable dt
= DBHelper.GetDataSet(sqlbm);
for (int i = 0; i < dt.Rows.Count; i++)
{
DropDownList1.Items.Add(dt.Rows[i][
0].ToString());
}
}
private void XmName()
{

}
private void Bind()
{
string sqlstr = "select top 10 [姓名],[员工编码],[部门] from WEC.KaoQin.请假表";
DataTable dt
= DBHelper.GetDataSet(sqlstr);
GridView1.DataSource
= dt;
GridView1.DataBind();
}
  
//下面的事件就是GridView合并表头的解决方案哦!

/// <summary>
///GridView合并表头
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
switch (e.Row.RowType)
{
case DataControlRowType.Header:

TableCellCollection tcHeader
= e.Row.Cells;
tcHeader.Clear();

//第一行表头
tcHeader.Add(new TableHeaderCell());
//tcHeader[0].Attributes.Add("bgcolor", "blue");
tcHeader[0].Attributes.Add("colspan", "18"); //跨Column
tcHeader[0].Text = "出差统计报表</th></tr><tr>";

//第二行表头
tcHeader.Add(new TableHeaderCell());
//tcHeader[1].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[1].Attributes.Add("rowspan", "3"); //跨Row
tcHeader[1].Text = "序号";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[2].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[2].Attributes.Add("rowspan", "3");
tcHeader[
2].Text = "姓&nbsp;&nbsp;&nbsp;&nbsp;名";
tcHeader.Add(
new TableHeaderCell());
//tcHeader[3].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[3].Attributes.Add("rowspan", "3");
tcHeader[
3].Text = "员工编码";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[4].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[4].Attributes.Add("rowspan", "3");
tcHeader[
4].Text = "部门";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[5].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[5].Attributes.Add("rowspan", "3");
tcHeader[
5].Text = "专业";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[6].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[6].Attributes.Add("colspan", "6");
tcHeader[
6].Text = "出差类型";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[7].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[7].Attributes.Add("rowspan", "3");
tcHeader[
7].Text = "项目简称";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[8].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[8].Attributes.Add("rowspan", "3");
tcHeader[
8].Text = "出差事由";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[9].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[9].Attributes.Add("rowspan", "3");
tcHeader[
9].Text = "出差地点";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[10].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[10].Attributes.Add("rowspan", "3");
tcHeader[
10].Text = "计划出差起止时间";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[11].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[11].Attributes.Add("rowspan", "3");
tcHeader[
11].Text = "计划出差天数";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[12].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[12].Attributes.Add("rowspan", "3");
tcHeader[
12].Text = "实际出差起止时间";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[13].Attributes.Add("bgcolor", "DarkSeaGreen");
tcHeader[13].Attributes.Add("rowspan", "3");
tcHeader[
13].Text = "实际出差天数</th></tr><tr>";


//第三行表头
tcHeader.Add(new TableHeaderCell());
// tcHeader[14].Attributes.Add("bgcolor", "Aqua");
tcHeader[14].Attributes.Add("rowspan", "2");
tcHeader[
14].Text = "项目出差";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[15].Attributes.Add("bgcolor", "Aqua");
tcHeader[15].Attributes.Add("rowspan", "2");
tcHeader[
15].Text = "经营出差";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[16].Attributes.Add("bgcolor", "Aqua");
tcHeader[16].Attributes.Add("colspan", "4");
tcHeader[
16].Text = "非项目出差</th></tr><tr>";

//第四行
tcHeader.Add(new TableHeaderCell());
// tcHeader[17].Attributes.Add("bgcolor", "Gray");
tcHeader[17].Text = "一般性出差";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[18].Attributes.Add("bgcolor", "Gray");
tcHeader[18].Text = "各类会议";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[19].Attributes.Add("bgcolor", "Gray");
tcHeader[19].Text = "培训";
tcHeader.Add(
new TableHeaderCell());
// tcHeader[20].Attributes.Add("bgcolor", "Gray");
tcHeader[20].Text = "其它";
break;
}
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//如果是绑定数据行
if (e.Row.RowType == DataControlRowType.DataRow)
{
//鼠标经过时,行背景色变
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#E6F5FA'");
//鼠标移出时,行背景色变
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
}
if (e.Row.RowIndex != -1)
{
int id = e.Row.RowIndex + 1;
e.Row.Cells[
0].Text = id.ToString();//Gridview自动生成序号
// e.Row.Cells[15].Text=dt2.Rows[id][3].ToString()+"--"+dt2.Rows[id][4].ToString();
}
}
protected void lnkBtnCreateExcel_Click(object sender, EventArgs e)
{
Export(
"application/ms-excel", "出差统计报表.xls");
}

/// <summary>
/// GridView导出为excel
/// </summary>
/// <param name="FileType">导出的文件类型</param>
/// <param name="FileName">导出文件名称</param>
private void Export(string FileType, string FileName)
{
Response.Charset
= "GB2312";
Response.ContentEncoding
= Encoding.UTF7;
Response.AppendHeader(
"Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.ContentType
= FileType;
this.EnableViewState = false;
StringWriter tw
= new StringWriter();
HtmlTextWriter hw
= new HtmlTextWriter(tw);
GridView1.RenderControl(hw);
Response.Write(tw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}

protected void btnSearch_Click(object sender, EventArgs e)
{
string fsstrv = Request.Form["sele"].ToString();
//Response.Write("<script>alert('" + fsstrv + "');</script>");

SqlParameter[] param
= new SqlParameter[1];
param[
0] = new SqlParameter("@wherestr", SqlDbType.VarChar);
param[
0].Value = null;
switch (fsstrv)
{
case "0":
Bind();
break;
case "1":
selectstr
= searchName;
param[
0].Value = TxtName.Text.Trim();
break;
case "2":
//selectstr = searchTimeStartEnd;
Bind();
break;
case "3":
selectstr
= searchBmName;
param[
0].Value = DropDownList1.SelectedValue;
break;
case "4":
//selectstr = searchXmName;
Bind();
break;
}
DataTable dt
= DBHelper.GetDataSet(selectstr, param);
GridView1.DataSource
= dt;
GridView1.DataBind();
}
}

 下面是效果图:

posted @ 2010-11-10 18:03  盛行天宇  阅读(2575)  评论(4编辑  收藏  举报