2010-09-21 33 views
8

Tengo una vista de cuadrícula Encuaderné una DataTable con esa Gridview Su dinámica así que no hay texto de código duro en desin.¿Cómo cambiar el texto del encabezado de Gridview después de Databound?

Traté de cambiarlo después de Databound y en PreRender de gridview, pero sin éxito.

En realidad, hay subrayados ('_') en el texto y quiero reemplazarlos con espacio.

A continuación se muestra el código

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

Respuesta

13

puede hacer esto con RowDataBound caso 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("_", " "); 
     } 
    } 
} 

y funciona bien.

+3

Eso funcionará, simplemente se hará cada vez que se enrute una fila. – Brissles

9

Usted puede cambiar el texto de la celda en lugar de la propiedad HeaderText:

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

No es necesario hacer esto en PreRender, justo después de los datos ha estado atado.

+0

compruébalo ... no funciona. – Azhar

+0

Sí, lo he intentado. – Brissles

+0

Tengo esto para trabajar usando 'grdSearchResult.HeaderRow.Cells.Count' en lugar de' grdSearchResult.Columns.Count' – emragins

0

Pero en el evento OnRowDataBound, el e.Row.Cell [i] .Text original no está disponible para alterar.

Ej. en el siguiente código, "headerRow" siempre está vacío.

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

Esto debería ser un comentario, no una respuesta. – kenrogers

+0

Sí, me encuentro con este problema ... La propiedad 'HeaderRow' es nula cuando intento usarlo durante el evento' Page_Load'. Buscando aquí para ver cuándo, dónde y cómo debería acceder al encabezado. – Zarepheth

2

Establezca la propiedad AutoGenerateColumns de gridview en falso y agregue 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> 
Cuestiones relacionadas