如何记住每次分页之间所选的复选框

时间:2010-11-04 11:59:39

标签: asp.net paging checkbox

我有一个分页视图。每个分页都有10行,包含用户名,电子邮件和复选框。

我需要能够检查几个复选框,在不同的“pagings”中,按一个按钮并向每个已经检查过的用户发送电子邮件。

麻烦的是我真的不知道如何记住每次分页之间所选的复选框。

你跟我在一起吗?

Deos是否有类似的解决方案或一些提示如何做到这一点? 我宁愿在没有jQuery的情况下解决这个问题,但是通常javascript或C#解决方案都能正常工作。

提前致谢!

1 个答案:

答案 0 :(得分:1)

试试这个 http://forums.asp.net/t/1619741.aspx?Remember+checkboxes+in+ListView

你可以维护一个List<>选择(比如说每个记录的ID,唯一值),并且必须在ViewState中保留该列表。更新页面更改列表。通过代码隐藏函数绑定checkbox复选框属性,该函数检查id是否在列表中。

这是一个样本:

        <asp:ListView ID="ListView1" runat="server" OnPagePropertiesChanging="ListView1_PagePropertiesChanging">
            <LayoutTemplate>
                <table id="Table2" runat="server" class="listview" width="100%">
                    <tr>
                        <td>
                            <table id="itemPlaceholderContainer" runat="server">
                                <tr>
                                    <th>
                                    </th>
                                    <th>
                                    </th>
                                    <th id="thid" runat="server" visible="false">
                                        ID
                                    </th>
                                    <th id="thname" runat="server">
                                        Name
                                    </th>
                                </tr>
                                <tr id="itemPlaceholder" runat="server">
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr id="Tr3" runat="server">
                        <td id="Td2" runat="server" style="">
                            <asp:DataPager ID="DataPager1" runat="server" PageSize="5" PagedControlID="ListView1"
                                OnPreRender="DataPager1_PreRender">
                                <Fields>
                                    <asp:NumericPagerField />
                                </Fields>
                            </asp:DataPager>
                        </td>
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        <input type="checkbox" id="CheckBox1" runat="server" value='<%# Eval("ID") %>' checked='<%# Selected(Eval("ID")) %>' />
                    </td>
                    <td>
                        <asp:Label ID="lblID" runat="server" Text='<%# Eval("ID") %>' />
                    </td>
                    <td>
                        <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' />
                    </td>
                </tr>
            </ItemTemplate>
        </asp:ListView>

code-behind:

        List<string> cBoxSelections = new List<string>();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindListView();
            }
        }

        private void BindListView()
        {
            ListView1.DataSource = CreateDataSource();
            ListView1.DataBind();
        }

        protected DataTable CreateDataSource()
        {
            DataTable dt = new DataTable();
            DataRow dr;
            dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
            dt.Columns.Add(new DataColumn("Name", typeof(string)));
            for (int i = 0; i < 33; i++)
            {
                dr = dt.NewRow();

                dr[0] = i;
                dr[1] = string.Concat("Name",i.ToString());
                dt.Rows.Add(dr);
            }
            return dt;
        }

        protected Boolean Selected(object sender)
        {
            Boolean flag = false;
            string ID = Convert.ToString(sender);
            if (!string.IsNullOrEmpty(ID))
            {
                flag = cBoxSelections.Exists(item => item.Equals(ID));
            }
            return flag;
        }

        private void UpdateSelections()
        {
            if (ViewState["sel"] != null)
            {
                cBoxSelections = (List<string>)ViewState["sel"];
            }
            foreach (ListViewDataItem item in ListView1.Items)
            {
                HtmlInputCheckBox cbox = (HtmlInputCheckBox)item.FindControl("CheckBox1");
                if (cbox != null)
                {
                    string selectedItem = cBoxSelections.Find(key => key.Equals(cbox.Value));
                    if (selectedItem == null)
                    {
                        if (cbox.Checked.Equals(true))
                        {
                            cBoxSelections.Add(cbox.Value);
                        }
                    }
                    if (selectedItem != null)
                    {
                        if (cbox.Checked.Equals(false))
                        {
                            cBoxSelections.Remove(cbox.Value);
                        }
                    }
                }
            }
            if (cBoxSelections.Count > 0)
            {
                ViewState["sel"] = cBoxSelections;
            }
        }
        protected void DataPager1_PreRender(object sender, EventArgs e)
        {
            BindListView();
        }


    protected void ListView1_PagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
    {
        UpdateSelections();
    }

您需要例程Selected(返回布尔值)和UpdateSelections(维护),其余代码只需获取ListView以演示样本以及虚拟数据。