2010-09-21 15 views
8

Ho una vista griglia Ho associato un DataTable con quella Gridview. La sua dinamica non ha alcun testo fisso. Testo in desin.Come modificare il testo dell'intestazione di Gridview dopo il Databound?

Ho provato a cambiarlo dopo Databound e in PreRender di gridview ma nessun successo.

In realtà ci sono caratteri di sottolineatura ('_') nel testo e voglio sostituirlo con lo spazio.

Qui di seguito è il codice

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

risposta

13

può fare questo con RowDataBound caso di 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("_", " "); 
     } 
    } 
} 

e funziona benissimo.

+3

Che funzionerà, sarà fatto ogni volta che una riga è vincolata. – Brissles

9

È possibile modificare il testo della cella piuttosto che la proprietà HeaderText:

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

Non è necessario farlo in PreRender, subito dopo i dati è stato legato.

+0

controllarlo ... non funziona. – Azhar

+0

Sì, ho provato. – Brissles

+0

Questo ha funzionato usando 'grdSearchResult.HeaderRow.Cells.Count' invece di' grdSearchResult.Columns.Count' – emragins

0

Ma in evento OnRowDataBound l'originale e.Row.Cell [i] .Text non è disponibile per la modifica.

Es. nel codice sottostante "headerRow" è sempre vuoto.

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

Questo dovrebbe essere un commento, non una risposta. – kenrogers

+0

Sì, sto correndo in questo problema ... La proprietà 'HeaderRow' è nullo quando tento di usarlo durante l'evento' Page_Load'. Cercando qui per vedere quando, dove e come dovrei accedere all'intestazione. – Zarepheth

2

Imposta la proprietà AutoGenerateColumns di gridview su false e aggiungi 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> 
Problemi correlati