启用网格视图排序后,在运行时更改网格视图中列的名称



我想在运行时更改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,但排序功能消失了。我该怎么做才能改变coulmn名称,同时排序功能也保持不变?我的分类没有问题。只有在编写上述代码时,该列的排序选项才会关闭。请帮忙!非常感谢。

问题是因为排序在GridView列名称中设置了一个LinkButton控件,而按照您的方式设置名称会禁用该控件。因此,您必须使用以下代码设置列的名称:

((LinkButton)e.Row.Cells[1].Controls[0]).Text = "Test1";

我猜您正在尝试使用AutoGenerateColumes?

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

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

或者,如果你不使用自动生成列,你也可以这样做:

myGrid.Columns[1].HeaderText = "test1";

我认为您的问题来自于订购网格时发送的回发。您不希望在订购网格后重新绑定网格。在你的页面加载你应该添加:

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

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

最新更新