我有一个gridview在Webpart上显示数据,标题中有链接按钮,允许按不同的字段排序(使用自定义的排序方法,每个列都不同)
按钮工作正常,但在点击处理程序中,它会更改文本,命令名称和字体。
这从不起作用(即按钮上没有发生任何变化),是否有任何理由不起作用?
Gridview ASCX:
<asp:GridView ID="GridView1" runat="server" Width="100%" AutoGenerateColumns="false"
AllowSorting="False">
<HeaderStyle />
<RowStyle />
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<table>
<tr>
<td>
<a>Name</a>
<asp:LinkButton ID="btnNameSort" runat="server" Text="Sort Ascending" OnClick="btnNameSort_Click" CommandName="asc" />
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
... Item code
</ItemTemplate>
这是背后的代码:
public void btnNameSort_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)GridView1.HeaderRow.FindControl("btnNameSort");
if (btn.CommandName == "asc")
{
btn.Text = "Sort Descending";
btn.Font.Bold = true;
btn.CommandName = "desc";
updateGridView1(true, "title");
}
else
{
btn.Text = "Sort Ascending";
updateGridView1(false, "title");
}
答案 0 :(得分:0)
我认为GridView正在重新渲染,而你所做的改变并没有坚持下去。我的猜测是updateGridView中有一个DataBind方法..对吗?我认为您应该通过在ViewState属性中存储方向和排序列的排序来设置文本。当GridView反弹时,您可以访问这些属性,这些属性现在将是持久性的。
顺便说一下 - 我认为这是一个非常好的问题。您还可以订阅ItemCreated处理程序并获取标题。如果您的sortdirection存储在viewstate中并且您的sortcolumn存储在viewstate中,您可以找到您要查找的单元格并相应地进行调整。