1

我想在运行时更改 gridview 列之一的名称。Gridview 还启用了排序。

网格视图看起来像:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" OnRowCreated="myGrid_Rowcreate" 
ShowFooter="false"
AllowSorting="true"
OnSorting="GridView1_Sorting"
EnableViewState="false"
ShowHeaderWhenEmpty="True"
AllowPaging="false">

<AlternatingRowStyle CssClass="altrowstyle" />
<HeaderStyle CssClass="headerstyle" />
<RowStyle CssClass="rowstyle" />
<RowStyle Wrap="false" />
<HeaderStyle Wrap="false" />
</asp:GridView>

我的 onRowCreate 函数看起来像:

  protected void myGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        GridViewRow gvr = e.Row;
        if (gvr.RowType == DataControlRowType.Header)
        {
            gvr.Cells[1].Text = "test1";
        }
    }

列名确实更改为 test1 但排序功能关闭。我应该怎么做才能改变库名以及排序功能也保留?我的排序没有问题。只有当我编写上面的代码时,该列的排序选项关闭。请帮忙!谢谢你。

4

3 回答 3

2

问题是因为排序在 GridView 列名称中设置了一个 LinkBut​​ton 控件,并以您的方式设置名称,禁用该控件。因此,您必须使用如下代码设置列的名称:

((LinkButton)e.Row.Cells[1].Controls[0]).Text = "Test1";
于 2015-09-26T23:27:09.740 回答
1

我认为您的问题来自您订购网格时发送的回发。您不想在订购后重新绑定您的网格。在您的 pageLoad 中,您应该添加:

If(!PostBack)
    // the code to bind data to your grid

这样,您可以防止重新加载网格,并且您在 myGrid_RowDataBound 中为您的列名称设置的信息应该保持不变......

于 2013-07-30T19:10:54.160 回答
1

我猜你正在尝试使用 AutoGenerateColumns?

如果是这种情况,为什么不能更改数据源中的列名(如果数据源是 SQL,则使用“AS”)?

否则,您更改单元格文本会使生成排序 javascript 回发的 ASP.NET 功能短路。

或者,如果您不使用 AutoGenerateColumns,您可以这样做:

myGrid.Columns[1].HeaderText = "test1";
于 2013-07-30T18:02:13.950 回答