在启用gridview排序时,在运行时更改Gridview中列的名称

时间:2013-07-30 16:35:45

标签: c# asp.net gridview gridview-sorting

我想在运行时更改gridview列之一的名称.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名称以及排序功能也会保留?我的排序没有问题。只有当我写上面时代码,该列的排序选项消失。 请帮忙! 谢谢。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我猜你正在尝试使用AutoGenerateColumns?

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

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

如果您不使用AutoGenerateColumns,则可以执行此操作:

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

答案 2 :(得分:1)

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

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

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