GridView代码生成的表头,为什么不能居中?
问题在注释中
- C# code
protected void gv_EmployeeP_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { //第一行表头HorizontalAlign="Center" TableCellCollection tcHeader = e.Row.Cells; tcHeader.Clear(); //第一层表头 tcHeader.Add(new TableHeaderCell()); tcHeader[0].Attributes.Add("rowspan", "1"); tcHeader[0].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[0].Text = "客服"; tcHeader.Add(new TableHeaderCell()); tcHeader[1].Attributes.Add("colspan", "3"); tcHeader[1].Text = "今日"; tcHeader[1].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[1].Font.Bold = true; tcHeader.Add(new TableHeaderCell()); tcHeader[2].Attributes.Add("colspan", "3"); tcHeader[2].Text = "昨日"; tcHeader[2].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[2].Font.Bold = true; tcHeader.Add(new TableHeaderCell()); tcHeader[3].Attributes.Add("colspan", "3"); tcHeader[3].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[3].Text = "上月</th></tr><tr>";//第二层表头的过度 tcHeader[3].Font.Bold = true; } }[解决办法]
不行的话就CSS搞定吧。
[解决办法]
因为你上面的th里没有设置,所以默认是居左显示的。
protected void gv_EmployeeP_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
//第一行表头HorizontalAlign="Center"
TableCellCollection tcHeader = e.Row.Cells;
tcHeader.Clear();
//第一层表头
tcHeader.Add(new TableHeaderCell());
tcHeader[0].Attributes.Add("rowspan", "1");
tcHeader[0].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用???
tcHeader[0].Text = "客服";
tcHeader.Add(new TableHeaderCell());
tcHeader[1].Attributes.Add("colspan", "3");
tcHeader[1].Text = "今日";
tcHeader[1].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用???
tcHeader[1].Font.Bold = true;
tcHeader.Add(new TableHeaderCell());
tcHeader[2].Attributes.Add("colspan", "3");
tcHeader[2].Text = "昨日";
tcHeader[2].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[2].Font.Bold = true;
tcHeader.Add(new TableHeaderCell());
tcHeader[3].Attributes.Add("colspan", "3");
tcHeader[3].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用???
tcHeader[3].Text = "上月</th></tr><tr>";//第二层表头的过度
tcHeader[3].Font.Bold = true;
}
}
与之对应的前面的<th align="center">
[解决办法]
可能的原因是你的css里面定义了样式导致你代码写的被覆盖
如
th{text-align: left;}
如果你没有加样式,是绝对会居中的,测试的例子
- HTML code
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataRow dr; dt.Columns.Add(new System.Data.DataColumn("ID", typeof(System.Int32))); dt.Columns.Add(new System.Data.DataColumn("Name0", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name1", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name2", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name3", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name4", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name5", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name6", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name7", typeof(System.String))); dt.Columns.Add(new System.Data.DataColumn("Name8", typeof(System.String))); for (int i = 0; i < 8; i++) { dr = dt.NewRow(); dr[0] = i; dr[1] = "孟子章" + i.ToString(); dr[2] = "孟子章" + i.ToString(); dr[3] = "孟子章" + i.ToString(); dr[4] = "孟子章" + i.ToString(); dr[5] = "孟子章" + i.ToString(); dr[6] = "孟子章" + i.ToString(); dr[7] = "孟子章" + i.ToString(); dr[8] = "孟子章" + i.ToString(); dr[9] = "孟子章" + i.ToString(); dt.Rows.Add(dr); } gv_EmployeeP.DataSource = dt; gv_EmployeeP.DataBind(); } protected void gv_EmployeeP_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { //第一行表头HorizontalAlign="Center" TableCellCollection tcHeader = e.Row.Cells; tcHeader.Clear(); //第一层表头 tcHeader.Add(new TableHeaderCell()); tcHeader[0].Attributes.Add("rowspan", "1"); tcHeader[0].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[0].Text = "客服"; tcHeader.Add(new TableHeaderCell()); tcHeader[1].Attributes.Add("colspan", "3"); tcHeader[1].Text = "今日"; tcHeader[1].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[1].Font.Bold = true; tcHeader.Add(new TableHeaderCell()); tcHeader[2].Attributes.Add("colspan", "3"); tcHeader[2].Text = "昨日"; tcHeader[2].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[2].Font.Bold = true; tcHeader.Add(new TableHeaderCell()); tcHeader[3].Attributes.Add("colspan", "3"); tcHeader[3].HorizontalAlign = HorizontalAlign.Center;//这一行为什么没起作用??? tcHeader[3].Text = "上月</th></tr><tr>";//第二层表头的过度 tcHeader[3].Font.Bold = true; } }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <asp:GridView ID="gv_EmployeeP" runat="server" OnRowCreated="gv_EmployeeP_RowCreated"> </asp:GridView> </form></body></html>