【问题标题】:How to remember the selected checkboxes between each paging-press如何记住每个分页机之间的选定复选框
【发布时间】:2011-05-05 00:41:03
【问题描述】:

我有一个带有分页的列表视图。每个页面有 10 行,包含用户名、电子邮件和复选框。

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

问题是我真的不知道如何记住每次分页按下之间选中的复选框。

你和我在一起吗?

Deos 有人有类似的解决方案或有关如何执行此操作的一些提示吗? 我更愿意在没有 jQuery 的情况下解决这个问题,但是普通的 javascript 或 C# 解决方案可以正常工作。

提前致谢!

【问题讨论】:

    标签: asp.net paging checkbox


    【解决方案1】:

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

    您可以维护一个列表 选择(例如每个记录的 ID、唯一值),并且必须将该列表保留在 ViewState 中。在页面更改时更新列表。通过检查 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 以演示示例以及虚拟数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2011-07-28
      • 2023-04-02
      相关资源
      最近更新 更多