读书人

GridView代码生成的表头为什么不能居

发布时间: 2012-05-01 12:48:58 作者: rapoo

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> 

读书人网 >asp.net

热点推荐