启用网格视图排序后,在运行时更改网格视图中列的名称
本文关键字:网格 视图 运行时 排序 启用 | 更新日期: 2023-09-27 18:25:35
我想在运行时更改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中为列名称设置的信息应该保持不变。。。