Gridview标题链接按钮不更新

时间:2011-07-27 13:54:08

标签: c# asp.net gridview

我有一个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");
        }

1 个答案:

答案 0 :(得分:0)

我认为GridView正在重新渲染,而你所做的改变并没有坚持下去。我的猜测是updateGridView中有一个DataBind方法..对吗?我认为您应该通过在ViewState属性中存储方向和排序列的排序来设置文本。当GridView反弹时,您可以访问这些属性,这些属性现在将是持久性的。

顺便说一下 - 我认为这是一个非常好的问题。您还可以订阅ItemCreated处理程序并获取标题。如果您的sortdirection存储在viewstate中并且您的sortcolumn存储在viewstate中,您可以找到您要查找的单元格并相应地进行调整。