更改GridView中列的标题文本

33
我有一个GridView,使用C#代码进行程序绑定。 问题是,列标题直接从数据库获取,这在网站上展示时可能看起来很奇怪。所以基本上,我想通过编程方式修改列标题文本。 我已经尝试了以下方法,
testGV.Columns[0].HeaderText = "Date";

并且

this.testGV.Columns[0].HeaderText = "Date";

似乎不能给我正确的结果。


请详细说明“不起作用”的具体情况,是否出现了错误?你是如何将数据绑定到表格中的? - Malice
为什么在从SQL检索数据时不使用AS关键字更改列名? - Karthik
1
基本上我正在使用以下内容: SqlDataAdapter DataSet
adapter.Fill(ds);

testGV.DataSource = ds; testGV.DataBind();

- Mana
1
更改您用于获取数据的查询或存储过程。 - Karthik
如果您正在使用AllowSorting属性来对GridView进行排序,请使用Sorted()事件来处理下面的建议,否则将其放在RowDataBound()中将不起作用。 - Fandango68
6个回答

55

你应该在GridViewRowDataBound 事件中执行此操作,该事件在每个GridViewRow被绑定数据后触发

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        e.Row.Cells[0].Text = "Date";
    }
}

或者你可以将AutogenerateColumns设置为false,并在aspx上声明添加列:

<asp:gridview id="GridView1" 
  onrowdatabound="GridView1_RowDataBound"
  autogeneratecolumns="False"
  emptydatatext="No data available." 
   runat="server">
    <Columns>
         <asp:BoundField DataField="DateField" HeaderText="Date" 
            SortExpression="DateField" />
    </Columns>
</asp:gridview>

在从SQL检索数据时,使用As关键字更改列名是否是更好的选择?我不确定是否建议这样做。 - Karthik
@TimSchmelter 谢谢,我只是想确认这是一个好的做法。 - Karthik
我在想,如何调用函数 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)? - Mana
谢谢。帮了我很大的忙。 - Akshay
GridViewRowEventArgs 我得到了一个错误,说这个命名空间的类型未知!!!我该如何解决它? - AbdallahRizk
不,实际上我在SharePoint环境中使用ASP.NET。 - AbdallahRizk

19

我认为这个有效:

 testGV.HeaderRow.Cells[0].Text="Date"

1
简短而精练。好答案! - Eric K
所有答案中最佳的答案! - elle0087
哪个GridView事件最适合放置? - B. Clay Shannon-B. Crow Raven
它在DataBound事件中对我有效,但我不知道那是否是最好的位置...它很慢...也许那个事件被调用了无数次... - B. Clay Shannon-B. Crow Raven
PreRender 似乎更快。 - B. Clay Shannon-B. Crow Raven

4
您可以使用GridView的DataRowBound事件来实现。请尝试以下代码示例:
protected void grv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.Cells[0].Text = "TiTle";
}
}

要了解有关行数据绑定事件的更多详细信息,可以查看此链接


2
最好从gridview中查找单元格,而不是使用静态/固定索引,这样在gridview添加或删除列时就不会产生任何问题。
ASPX:
<asp:GridView ID="GridView1" OnRowDataBound="GridView1_RowDataBound" >
    <Columns>
        <asp:BoundField HeaderText="Date" DataField="CreatedDate" />
    </Columns>
</asp:GridView>

CS:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        for (int i = 0; i < e.Row.Cells.Count; i++)
        {
            if (string.Compare(e.Row.Cells[i].Text, "Date", true) == 0)
            {
                e.Row.Cells[i].Text = "Created Date";
            }
        }
    }
}

1
在你的asp.net页面上添加gridview。
<asp:GridView ID="GridView1" onrowdatabound="GridView1_RowDataBound" >
</asp:GridView>

在您的C#类中创建一个名为GridView1_RowDataBound的受保护方法。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        e.Row.Cells[0].Text = "HeaderText";
    }
}

一切应该正常运作。

0
protected void grdDis_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            #region Dynamically Show gridView header From data base
            getAllheaderName();/*To get all Allowences master headerName*/

            TextBox txt_Days = (TextBox)grdDis.HeaderRow.FindControl("txtDays");
            txt_Days.Text = hidMonthsDays.Value;
            #endregion
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接