
然后增加列:
DataTable dt=new DataTable()//创建对象
dt.Columns.Add("列1") //创建一列名为“列1”
您好,您这样: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
}
首先了解一下JSF中DataTable的渲染方式:DataTable --<Header>UIComponent --<Children>List<HtmlColumn>----<HtmlColumn>------<Header>UIComponent ----<Children>List<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)dt.getChildren().add(column)} }其中,动态建立控件的方法为直接创建一个控件,然后通过ValueExpression来设置控件在运行时显示的值,如果是Column中的数据,则可以使用#{tableVar.ColumnName}格式的EL表达式。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)