
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// 计算数据,完全可以从数据看取得
ICollection CreateDataSource( )
{
System.Data.DataTable dt = new System.Data.DataTable()
System.Data.DataRow dr
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)))
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)))
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)))
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)))
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)))
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)))
for (int i = 0i <8i++)
{
System.Random rd = new System.Random(Environment.TickCount * i)
dr = dt.NewRow()
dr[0] = "班级" + i.ToString()
dr[1] = "学生" + i.ToString()
dr[2] = System.Math.Round(rd.NextDouble() * 100, 2)
dr[3] = System.Math.Round(rd.NextDouble() * 100, 2)
dr[4] = System.Math.Round(rd.NextDouble() * 100, 2)
dr[5] = System.Math.Round(rd.NextDouble() * 100, 2)
dt.Rows.Add(dr)
}
System.Data.DataView dv = new System.Data.DataView(dt)
return dv
}
protected void Page_Load( object sender, EventArgs e )
{
if (!IsPostBack)
{
GridView1.BorderColor = System.Drawing.Color.DarkOrange
GridView1.DataSource = CreateDataSource()
GridView1.DataBind()
}
}
protected void GridView1_RowCreated( object sender, GridViewRowEventArgs e )
{
if (e.Row.RowType == DataControlRowType.Header)
{
//创建一个GridViewRow,相当于表格的 TR 一行
GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal)
string HeaderBackColor = "#EDEDED"
rowHeader.BackColor = System.Drawing.ColorTranslator.FromHtml(HeaderBackColor)
//实现确定要显示的表头样式,也可以通过计算生成
//<tr>
// <td rowspan='2'>关键单元格</td>
// <td colspan='2'>表头文字</td>
// <td colspan='2'>表头文字</td>
// <td>表头文字</td>
// </tr>
// <tr bgcolor='#FFF'>
// <td colspan='2'>表头文字</td>
// <td rowspan='2'>表头文字</td>
// <td colspan='2'>表头文字</td>
// </tr>
// <tr bgcolor='#FFF'>
// <td>表头文字</td>
// <td>表头文字</td>
// <td>表头文字</td>
// <td>表头文字</td>
// <td>表头文字</td>"
// </tr>
// 上面的样式可以设置斜线
Literal newCells = new Literal()
newCells.Text = @"表头文字1</th>
<th colspan='2'>表头文字2</th>
<th colspan='2'>表头文字3</th>
<th>表头文字4</th>
</tr>
<tr bgcolor='" + HeaderBackColor + "'>"
newCells.Text += @"
<th colspan='2'>表头文字5</th>
<th rowspan='2'>表头文字6</th>
<th colspan='2'>表头文字7</th>
</tr>
<tr bgcolor='" + HeaderBackColor + "'>"
newCells.Text += @"
<th>表头文字8</th>
<th>表头文字9</th>
<th>表头文字10</th>
<th>表头文字11</th>
<th>表头文字12"
TableCellCollection cells = e.Row.Cells
TableHeaderCell headerCell = new TableHeaderCell()
//下面的属性设置与 <td rowspan='2'>关键单元格</td>要一致
headerCell.RowSpan = 2
headerCell.Controls.Add(newCells)
rowHeader.Cells.Add(headerCell)
rowHeader.Cells.Add(headerCell)
rowHeader.Visible = true
//添加到 GridView1
GridView1.Controls[0].Controls.AddAt(0, rowHeader)
}
}
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Attributes.Add("style", "background:#9999FFcolor:#FFFFFFfont-size:14px")
}
else
{
e.Row.Attributes.Add("style", "background:#FFF")
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>为 GridView 添加多层表头</title>
</head>
<body>
<form id="Form1" runat="server">
<asp:GridView ID="GridView1" runat="server" CellSpacing="1" CellPadding="3" Font-Size="12px"
Width="600px" BackColor="#000000" BorderWidth="0" OnRowDataBound="GridView1_RowDataBound"
OnRowCreated="GridView1_RowCreated">
</asp:GridView>
</form>
</body>
</html>
首先了解一下JSF中DataTable的渲染方式:DataTable--<Header UIComponent--<ChildrenList<HtmlColumn
----<HtmlColumn
------<HeaderUIComponent
----<ChildrenList<UIComponent
因此,要在后台变更DataTable的状态,可以用dt.setHeader(UIComponent)设置DataTable的表头,然后可以往dt.getChildren()中添加HtmlColumn类型的列,同样,列中也可以由Header和Children组成。
代码实现如下:
private void initialReportTable(List<ExcelReport reportList) {
dt.getChildren().clear()
for (ExcelReport report : reportList) {
HtmlColumn column = new HtmlColumn()
HtmlOutputText header = new HtmlOutputText()
header.setValueExpression("value",
getValueExpression("#{rmaReport.captions.c"
+ report.getPosition() + "}"))
column.setHeader(header)
HtmlOutputText value = new HtmlOutputText()
String ve = getVEString(report)
System.out.println(report.getCaption() + " : " + ve)
value.setValueExpression("value", getValueExpression(ve))
column.getChildren().add(value)
您好,您这样:protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = FormatDT()
GridView1.DataBind()
}
}
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", "#8E8E8E")
tcHeader[0].Attributes.Add("rowspan", "0")//跨Row
tcHeader[0].Attributes.Add("colspan", "9")//跨Column
tcHeader[0].Text = "全部信息</tr><tr>"
//第二行表头
tcHeader.Add(new TableHeaderCell())
tcHeader[1].Attributes.Add("bgcolor", "#008A23")
tcHeader[1].Text = "身份z号码"
tcHeader.Add(new TableHeaderCell())
tcHeader[2].Text = "基本信息"
tcHeader[2].Attributes.Add("bgcolor", "#005EBB")
tcHeader[2].Attributes.Add("colspan", "3")
tcHeader.Add(new TableHeaderCell())
tcHeader[3].Text = "福利"
tcHeader[3].Attributes.Add("bgcolor", "#008A23")
tcHeader[3].Attributes.Add("colspan", "2")
tcHeader.Add(new TableHeaderCell())
tcHeader[4].Text = "应发合计"
tcHeader[4].Attributes.Add("bgcolor", "#008A23")
tcHeader.Add(new TableHeaderCell())
tcHeader[5].Text = "联系方式</tr><tr>"
tcHeader[5].Attributes.Add("bgcolor", "#005EBB")
tcHeader[5].Attributes.Add("colspan", "2")
//第三行表头
tcHeader.Add(new TableHeaderCell())
tcHeader[6].Text = "身份z号码"
tcHeader.Add(new TableHeaderCell())
tcHeader[7].Text = "姓名"
tcHeader.Add(new TableHeaderCell())
tcHeader[8].Text = "出生日期"
tcHeader.Add(new TableHeaderCell())
tcHeader[9].Text = "性别"
tcHeader.Add(new TableHeaderCell())
tcHeader[10].Text = "基本工资"
tcHeader.Add(new TableHeaderCell())
tcHeader[11].Text = "奖金"
tcHeader.Add(new TableHeaderCell())
tcHeader[12].Text = "应发合计"
tcHeader.Add(new TableHeaderCell())
tcHeader[13].Text = "家庭住址"
tcHeader.Add(new TableHeaderCell())
tcHeader[14].Text = "邮政编码"
break
//数据行 内容自适应 不换行
case DataControlRowType.DataRow:
TableCellCollection cells1 = e.Row.Cells
for (int i = 0i <cells1.Counti++)
{
cells1[i].Wrap = false//设置此项切记 不要设置前台GridView宽度
}
break
}
}
//创建DataTable
protected DataTable CreateDT()
{
DataTable tblDatas = new DataTable("Datas")
//序号列
//tblDatas.Columns.Add("ID", Type.GetType("System.Int32"))
//tblDatas.Columns[0].AutoIncrement = true
//tblDatas.Columns[0].AutoIncrementSeed = 1
//tblDatas.Columns[0].AutoIncrementStep = 1
//数据列
tblDatas.Columns.Add("身份z号码", Type.GetType("System.String"))
tblDatas.Columns.Add("姓名", Type.GetType("System.String"))
tblDatas.Columns.Add("出生日期", Type.GetType("System.String"))
tblDatas.Columns.Add("性别", Type.GetType("System.String"))
tblDatas.Columns.Add("基本工资", Type.GetType("System.Decimal"))
tblDatas.Columns.Add("奖金", Type.GetType("System.Decimal"))
//统计列开始
tblDatas.Columns.Add("应发合计", Type.GetType("System.String"), "基本工资+奖金")
//统计列结束
tblDatas.Columns.Add("家庭住址", Type.GetType("System.String"))
tblDatas.Columns.Add("邮政编码", Type.GetType("System.String"))
tblDatas.Rows.Add(new object[] { null, "张三", "1982", "0", 3000, 1000, null, "深圳市", "518000" })
tblDatas.Rows.Add(new object[] { null, "李四", "1983", "1", 3500, 1200, null, "深圳市", "518000" })
tblDatas.Rows.Add(new object[] { null, "王五", "1984", "1", 4000, 1300, null, "深圳市", "518000" })
tblDatas.Rows.Add(new object[] { null, "赵六", "1985", "0", 5000, 1400, null, "深圳市", "518000" })
tblDatas.Rows.Add(new object[] { null, "牛七", "1986", "1", 6000, 1500, null, "深圳市", "518000" })
return tblDatas
}
//转换DataTable中的数据 用于逻辑处理相应的数据 显示
protected DataTable FormatDT()
{
DataTable dt1 = CreateDT()
//容错处理 用于不确定 自动产生的列
if (dt1.Columns.Contains("性别"))
{
foreach (DataRow dr in dt1.Rows)
{
dr["性别"] = (dr["性别"].ToString() == "0") ? "女" : "男"
}
}
return dt1
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)