2010-09-21 25 views
8

我有一个gridview我绑定一个DataTable与该Gridview它的动态,所以没有硬编码在设计文本。如何在Databound后更改Gridview的标题文本?

我试图在Databound和GridView的PreRender之后改变它,但没有成功。

其实在文本中有下划线('_'),我想用空格替换它。

下面是代码

<asp:GridView ID="grdSearchResult" runat="server" AutoGenerateColumns="True" Width="99%" OnPreRender="grdSearchResult_PreRender" 
      OnRowCreated="grdSearchResult_OnRowCreated" OnPageIndexChanging="grdSearchResult_PageIndexChanging"> 
      <HeaderStyle ForeColor="White" BackColor="#215B8D" /> 
      <AlternatingRowStyle BackColor="#F7F7F7" /> 
      <RowStyle CssClass="gridtext" HorizontalAlign="Center" /> 
     </asp:GridView> 



protected void grdSearchResult_PreRender(object sender, EventArgs e) 
{ 
    for (int i = 0; i < grdSearchResult.Columns.Count; i++) 
    { 
     grdSearchResult.Columns[i].HeaderText = grdSearchResult.Columns[i].HeaderText.Replace("_", ""); 
    } 
} 

回答

13

可与RowDataBound事件的GridView

protected void grdSearchResult_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      e.Row.Cells[i].Text = e.Row.Cells[i].Text.Replace("_", " "); 
     } 
    } 
} 

做到这一点,它工作正常。

+3

这将工作,它只会在每次绑定行时完成。 – Brissles 2010-09-21 09:06:46

9

您可以更改单元格的文本,而不是HeaderText属性:

 for (int i = 0; i < grdSearchResult.Columns.Count; i++) 
     { 
      grdSearchResult.HeaderRow.Cells[i].Text = grdSearchResult.HeaderRow.Cells[i].Text.Replace("_", ""); 
     } 

你并不需要做这的PreRender,就在数据后已受到约束。

+0

检查它不起作用。 – Azhar 2010-09-21 08:57:18

+0

它确实,我试过了。 – Brissles 2010-09-21 09:12:58

+0

得到这个工作使用'grdSearchResult.HeaderRow.Cells.Count'而不是'grdSearchResult.Columns.Count' – emragins 2011-07-26 21:06:31

0

但是在OnRowDataBound事件中原来的e.Row.Cell [i] .Text不可用于更改。

例如,在下面的代码中,“headerRow”总是空的。

protected void grdSearchResult_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     for (int i = 0; i < e.Row.Cells.Count; i++) 
     { 
      string headerRow = e.Row.Cells[i].Text; 
      e.Row.Cells[i].Text = headerRow.Replace("_", " "); 
     } 
    } 
} 
+0

这应该是一个评论,而不是一个答案。 – kenrogers 2013-05-30 20:02:24

+0

是的,我遇到了这个问题......当我尝试在'Page_Load'事件中使用它时,'HeaderRow'属性为null。在这里搜索以查看我应该何时,何地以及如何访问标题。 – Zarepheth 2013-08-04 04:51:48

2

将GridView的AutoGenerateColumns属性设置为false并添加BoundFields。

<asp:GridView ID="grdEmployee" runat="server" AutoGenerateColumns="false"> 
<columns> 
<asp:BoundField HeaderText="ID" DataField="empNo" /> 
<asp:BoundField HeaderText="First Name" DataField="fName" /> 
<asp:BoundField HeaderText="Last Name" DataField="lName" /> 
</columns> 
</asp:GridView> 
相关问题