题 更改GridView中列的标题文本


我有一个gridview,我用c#代码以编程方式绑定。 问题是,列直接从db获取它们的头文本,这在网站上看起来很奇怪,所以我想用c#代码以编程方式更改它。 我已经尝试过,

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

要么

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

没有帮助。


22
2017-10-22 14:10


起源


你能详细说明“没有帮助”吗?你有错误吗?你如何将数据绑定到网格? - Malice
为什么不在从SQL检索数据时使用AS关键字更改列名? - Karthik
基本上即时使用,SqlDataAdapter DataSet --------- adapter.Fill(ds); testGV.DataSource = ds; testGV.DataBind(); --------- - Mana
在查询或用于获取数据的存储过程中更改它 - Karthik
如果你是AllowSorting gridview,使用Sorted()事件来处理下面的建议,否则将它放在RowDataBound()中是行不通的 - Fandango68


答案:


你应该在GridView中做到这一点 RowDataBound 每个人触发的事件 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>

44
2017-10-22 14:17



是使用As关键字更改列名,而从SQL检索更好的选项?我不确定是否推荐 - Karthik
oki,会尝试一下 - Mana
@karthi:如果可能的话,通常最好直接更改数据源。但我假设OP不能或不想修改sql。在这种情况下,它并没有产生很大的不同,它只是一个名字。 - Tim Schmelter
@TimSchmelter谢谢你我只是想确保它是一个很好的方法 - Karthik
傻,现在它的工作完美。多谢你们 - Mana


我觉得这个有效:

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

11
2017-12-24 21:32



简短又甜蜜。好答案! - Eric K


您可以使用gridview的datarow bound事件来完成。尝试以下代码示例:

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

有关行数据绑定事件研究的更多详细信息 Thsi .... 


4
2017-10-22 14:17



谢谢你的链接。 - Sylca
@Sylca很高兴为您服务........ - Ram Singh


在您的asp.net页面上添加gridview

<asp:GridView ID="GridView1" onrowdatabound="GridView1_RowDataBound" >
</asp:GridView>

在c#类中创建一个名为GridView1_RowDataBound的方法protected void方法

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

一切都应该工作正常。


1
2018-02-10 15:57





最好从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";
            }
        }
    }
}

0
2017-09-12 10:55