Gridview与Update Panel中的复选框,分页和后退按钮的问题

时间:2011-08-18 17:00:04

标签: gridview back-button updatepanel

我正在使用Gridview,第一列是复选框。

Gridview使用分页和排序。

复选框位于UpdatePanel内部,因为我在选中复选框时使用CheckedChanged事件(不想使用完整的回发)。

每次选中复选框时,在代码隐藏中,如果需要,我会启用比较项目的按钮,除了在viewstate中选中该复选框并检查所选项目是否未达到最大值。如果达到最大项目,我将禁用剩余的未选中复选框(最大项目是一项限制,以避免用户选择更多无法在页面布局中显示的项目。)

这很有用,除了例如当你转到第2页,然后点击浏览器的后退按钮。

当您点击后退按钮时,所有已禁用的复选框都会启用,用户可以选择更多的最大值。

如果我没有为复选框使用更新面板,它会很好用,它会记住已禁用复选框,但我不想在每次选中复选框时都进行完整的回发。

有什么方法可以解决这个问题吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

我发现的解决方案是在每个Checkbox之外使用HiddenField。 Hiddenfield有每个项目的id。

然后我用子键设置一个Cookie,每个子键包含每个复选框的id。

最后在使用javascript的onload事件中,我检索cookie并检查用户按下后退按钮后仍未选中的复选框。

答案 1 :(得分:0)

完美解决方案,如果您在更新面板中有gridview

function SelectAll(myvar) {
    if (jQuery(myvar).attr('checked')) {
        var checkboxes = jQuery(':checkbox', '#ContentGrid');
        for (i = 0; i < checkboxes.length; i++) {
            jQuery(checkboxes[i]).attr('checked', true)
        }
    }
    else {
        var checkboxes = jQuery(':checkbox', '#ContentGrid');
        for (i = 0; i < checkboxes.length; i++) {
            jQuery(checkboxes[i]).attr('checked', false)
        }
    }
        }
<asp:GridView ID="contentsGrid" runat="server"><columns>
<asp:TemplateField>
<HeaderTemplate><asp:CheckBox ID="chkAll" Text="Select" runat="Server" SelectAll(this);"     />  

</HeaderTemplate>
<ItemTemplate><asp:CheckBox ID="chkContent"     runat="Server" /></ItemTemplate></asp:TemplateField>

</columns>
</asp:GridView>