2010-09-21 12 views
8

J'ai un gridview J'ai lié un DataTable avec ce Gridview Sa dynamique ainsi aucun texte dur Texte dans desin.Comment changer le texte d'en-tête de Gridview après Databound?

J'ai essayé de le changer après Databound et dans PreRender de gridview mais pas de succès.

En fait, il y a Underscores ('_') dans le texte et je veux le remplacer par de l'espace.

est le code ci-dessous

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

Répondre

13

peut le faire avec RowDataBound cas de 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("_", " "); 
     } 
    } 
} 

et il fonctionne très bien.

+3

Cela fonctionnera, ce sera juste fait à chaque fois qu'une ligne est liée. – Brissles

9

Vous pouvez modifier le texte de la cellule plutôt que la propriété HeaderText:

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

Vous n'êtes pas obligé de le faire en PreRender, juste après les données a été lié.

+0

vérifiez ... cela ne fonctionne pas. – Azhar

+0

Il fait, j'ai essayé. – Brissles

+0

J'ai obtenu ceci pour travailler en utilisant 'grdSearchResult.HeaderRow.Cells.Count' au lieu de' grdSearchResult.Columns.Count' – emragins

0

Mais dans l'événement OnRowDataBound, le texte original e.Row.Cell [i] .Text n'est pas disponible pour la modification.

Par exemple. dans le code ci-dessous le "headerRow" est toujours vide.

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

Cela devrait être un commentaire, pas une réponse. – kenrogers

+0

Ouais, je suis confronté à ce problème ... La propriété 'HeaderRow' est nulle quand je tente de l'utiliser pendant l'événement' Page_Load'. Recherche ici pour voir quand, où, et comment je devrais accéder à l'en-tête. – Zarepheth

2

Définissez la propriété AutoGenerateColumns de gridview sur false et ajoutez 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>