2010-09-21 14 views
8

Mam gridview I związany z DataTable z tym Gridview jego dynamiczne, więc bez hardcode Tekst w desin.Jak zmienić tekst nagłówka Gridview po Databound?

Próbowałem zmienić to po Databound i PreRender z gridview, ale bez powodzenia.

W tekście istnieją znaki podkreślenia ("_") i chcę zastąpić je spacją.

Poniżej jest kod

<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("_", ""); 
    } 
} 

Odpowiedz

13

Może to zrobić z RowDataBound przypadku 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("_", " "); 
     } 
    } 
} 

i działa dobrze.

+3

To zadziała, po prostu zostanie zrobione za każdym razem, gdy rząd jest związany. – Brissles

9

Można zmienić tekst w komórce zamiast nieruchomości HeaderText:

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

Nie trzeba w tym celu w prerender, tuż po danych został związany.

+0

sprawdź ... nie działa. – Azhar

+0

Tak, próbowałem. – Brissles

+0

Mam to do pracy przy użyciu 'grdSearchResult.HeaderRow.Cells.Count' zamiast' grdSearchResult.Columns.Count' – emragins

0

Ale w przypadku zdarzenia OnRowDataBound oryginalny e.Row.Cell [i] .Text nie jest dostępny do modyfikacji.

Np. w poniższym kodzie "headerRow" jest zawsze puste.

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

To powinien być komentarz, a nie odpowiedź. – kenrogers

+0

Tak, mam na ten problem ... Właściwość 'HeaderRow' ma wartość NULL, gdy próbuję go użyć podczas zdarzenia" Page_Load ". Wyszukiwanie tutaj, aby zobaczyć, kiedy, gdzie i jak powinienem uzyskać dostęp do nagłówka. – Zarepheth

2

Ustawia właściwość AutoGenerateColumns z gridview na false i dodaje 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> 
Powiązane problemy