2010-09-21 16 views
8

Ich habe eine Gridview Ich habe eine DataTable mit dieser Gridview seine Dynamik gebunden also kein Hardcode Text in Desin.Wie ändert man den Kopftext von Gridview nach Databound?

Ich habe versucht, es nach Databound und in PreRender von Gridview, aber kein Erfolg zu ändern.

Eigentlich sind Unterstriche ('_') im Text und ich möchte es durch Leerzeichen ersetzen.

Im Folgenden finden Sie Code

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

Antwort

13

Kann dies mit RowDataBound Fall 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("_", " "); 
     } 
    } 
} 

und es funktioniert gut.

+3

Das wird funktionieren, es wird nur jedes Mal gemacht, wenn eine Reihe gebunden ist. – Brissles

9

Sie können den Text der Zelle ändern, anstatt die Eigenschaft Headertext:

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

Sie brauchen nicht dieses in PreRender zu tun, nur nach dem Datum wurde gebunden.

+0

überprüfen Sie es ... es funktioniert nicht. – Azhar

+0

Es tut, ich habe es versucht. – Brissles

+0

Das funktioniert mit 'grdSearchResult.HeaderRow.Cells.Count' anstelle von' grdSearchResult.Columns.Count' – emragins

0

Aber im OnRowDataBound-Ereignis ist das ursprüngliche e.Row.Cell [i] .Text zum Ändern nicht verfügbar.

Eg. Im folgenden Code ist "headerRow" immer leer.

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

Dies sollte ein Kommentar sein, keine Antwort. – kenrogers

+0

Ja, ich stoße auf dieses Problem ... Die 'HeaderRow'-Eigenschaft ist null, wenn ich versuche, sie während des Ereignisses 'Page Load' zu verwenden. Ich suche hier, um zu sehen, wann, wo und wie ich auf den Header zugreifen soll. – Zarepheth

2

Set Autogeneratecolumns Eigenschaft Gridview auf false und fügen Sie 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> 
Verwandte Themen