Как запомнить выбранные флажки между каждым пейджингом - PullRequest
3 голосов
/ 04 ноября 2010

У меня есть список с пейджингом.Каждый пейджинг состоит из 10 строк с именем пользователя, адресом электронной почты и флажком.

Мне нужно иметь возможность проверить пару флажков, в разных «страницах», нажать кнопку и отправить электронное письмо каждый раз, когда-либопользователь, который был проверен.

Проблема в том, что я не знаю, как запомнить выбранные флажки между каждым пейджингом.

Ты со мной?

DeosУ кого-нибудь есть подобное решение или несколько советов, как это сделать?Я бы предпочел решить это без jQuery, но Javascript ordinare или решение C # работают нормально.

Заранее спасибо!

1 Ответ

1 голос
/ 04 ноября 2010

Попробуйте это http://forums.asp.net/t/1619741.aspx?Remember+checkboxes+in+ListView

, вы можете сохранить список <> выборов (скажем, идентификатор каждой записи, уникальное значение), и вам придется сохранить этот список в ViewState.обновить список на странице изменения.свяжите свойство checkbox selected через функцию code-behind, которая проверяет, есть ли 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();
    }

вам нужны выбранные подпрограммы (возвращающие логическое) и UpdateSelections (который поддерживает), остальная часть кода просто получает ListView для демонстрации образца вместе с фиктивными данными.

...