I have a gridview I bound a DataTable with that Gridview Its dynamic so no hardcode Text in desin.
I tried to change it after Databound and in PreRender of gridview but no Suc开发者_开发百科cess.
Actually there are Underscores('_') in text and I want to Replace it with space.
Below is 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("_", "");
}
}
Can do this with RowDataBound
event of 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("_", " ");
}
}
}
and it works fine.
You can change the text of the cell rather than the HeaderText property:
for (int i = 0; i < grdSearchResult.Columns.Count; i++)
{
grdSearchResult.HeaderRow.Cells[i].Text = grdSearchResult.HeaderRow.Cells[i].Text.Replace("_", "");
}
You don't need to do this in PreRender, just after the data has been bound.
Set AutoGenerateColumns property of gridview to false and add 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>
But in OnRowDataBound event the original e.Row.Cell[i].Text is not available for altering.
Eg. in the code below the "headerRow" is always empty.
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("_", " ");
}
}
}
If your header is more complex than the other examples (eg. sort buttons) use:
protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow oRow = e.Row;
if (oRow.RowType == DataControlRowType.Header)
{
foreach (TableCell oCell in oRow.Cells)
{
foreach (var oCtl in oCell.Controls) {
if(oCtl.GetType() == typeof(System.Web.UI.WebControls.Label))
{
Label oLBL = (Label)oCtl;
oLBL.Text = oLBL.Text.Replace("_", "");
}
}
}
}
}
精彩评论