【问题标题】:Gridview header linkbutton not updatingGridview标题链接按钮未更新
【发布时间】:2011-07-27 13:54:07
【问题描述】:

我有一个在 Webpart 上显示数据的 gridview,在标题中带有链接按钮,以允许按不同字段排序(使用自定义排序方法,每列会有所不同)

该按钮工作正常,但在单击处理程序中它会更改文本、命令名称和字体。

这永远不会起作用(即按钮上没有发生任何变化),有什么理由不应该起作用吗?

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");
        }

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

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

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

    【讨论】:

    • 这对我有用,我将参数添加到视图状态(即文本、命令和粗体),然后在 Gridview1_DataBound 方法中读取这些,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多