我想在运行时更改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名称以及排序功能也会保留?我的排序没有问题。只有当我写上面时代码,该列的排序选项消失。 请帮忙! 谢谢。
答案 0 :(得分:2)
问题是因为Sorting在GridView列名称中设置了LinkButton控件,并以您的方式设置名称,禁用该控件。因此,您必须使用以下代码设置列的名称:
((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中为列的名称设置的信息应该保持不变...