如何在数据绑定后更改Gridview的标题文本?

时间:2010-09-21 06:58:23

标签: .net asp.net gridview asp.net-3.5

我有一个gridview我使用Gridview绑定了一个DataTable它的动态因此没有硬编码文本。

我尝试在Databound之后和gridview的PreRender中更改它但没有成功。

实际上文字中有下划线('_'),我想用空格替换它。

以下是代码

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

5 个答案:

答案 0 :(得分:13)

可以使用RowDataBound

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

它工作正常。

答案 1 :(得分:9)

您可以更改单元格的文本而不是HeaderText属性:

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

在绑定数据之后,您无需在PreRender中执行此操作。

答案 2 :(得分:2)

将gridview的AutoGenerateColumns属性设置为false并添加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>

答案 3 :(得分:0)

但是在RowDataBound事件中,原始的e.Row.Cell [i] .Text不可用于更改。

EG。在下面的代码中,“标题行”始终为空。

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

答案 4 :(得分:0)

如果标题比其他示例(例如排序按钮)更复杂,请使用:

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