Поддерживать состояние списка флажков внутри gridview asp.net

У меня есть список флажков (с 4 элементами списка) в одном из столбцов сетки. Он не заполняется из базы данных. Я хочу сохранить состояние всех элементов списка (отмеченных или не отмеченных), когда я перехожу на другую страницу сетки. Я попытался установить EnableViewstate="true" для сетки и списка флажков, но это не работает. Вот html-разметка:

<asp:GridView ID="grdUnits" runat="server" AutoGenerateColumns="false"
                        AllowPaging="true" PageSize="20" OnRowDataBound="grdUnit_RowDataBound" OnPageIndexChanging="grdUnit_PageIndexChanging" 
                        RowStyle-BackColor="White" AlternatingRowStyle-BackColor="LightBlue"  BorderStyle="Solid"
                        Height="426px" Width="1500px">
                        <PagerSettings  Mode="Numeric" />
                        <Columns>
                             <asp:BoundField DataField="SUKEY" HeaderText="Unit Code" />
                             <asp:BoundField DataField="CREDITS" HeaderText="Credits"/> 
                             <asp:TemplateField>
                                 <HeaderTemplate>Standard Semester or Term</HeaderTemplate>
                                 <ItemTemplate>
                                     <asp:CheckBoxList ID="cblStandardSem" runat="server" RepeatDirection="Horizontal" TextAlign="Left" RepeatLayout="Table">
                                         <asp:ListItem Value="SummerTermSemSt" Text="14ST"></asp:ListItem>
                                         <asp:ListItem Value="Semester1St" Text="14S1"></asp:ListItem>
                                         <asp:ListItem Value="WinterTermSemSt" Text="14WT"></asp:ListItem>
                                         <asp:ListItem Value="Semester2St" Text="14S2"></asp:ListItem>
                                     </asp:CheckBoxList>
                                 </ItemTemplate>
                                 <ItemStyle Width="300px" HorizontalAlign="Center" VerticalAlign="Middle"/>
                             </asp:TemplateField>

                        </Columns>
                    </asp:GridView>

Код позади:

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
          BindDataGrid();
    }
}

private void BindDataGrid()
{
    //fetch data from database
    grdUnits.DataBind();
}

protected void grdUnit_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
     grdUnits.PageIndex = e.NewPageIndex;
     BindDataGrid();
}

Я сталкивался с сообщениями, в которых упоминается о сохранении состояния списка флажков вне gridvew, но это бесполезно. Я не могу найти способ сохранить состояние списка флажков (который находится внутри сетки) и сохранить его в базе данных.


person user1550951    schedule 27.06.2014    source источник
comment
см. это aspdotnet-suresh.com/2010/ 04/   -  person Amit Kumar    schedule 27.06.2014
comment
@AmitKumar: я прочитал этот пост, но, поскольку он для флажка, он мне не помогает.   -  person user1550951    schedule 27.06.2014


Ответы (1)


Неважно, установили ли вы EnableViewstate="true" или нет, когда ваш элемент управления (CheckBoxList) не заполняется или не проверяется из базы данных, ваш элемент управления потеряет проверенные данные в любое время, когда вы вызываете метод DataBind для представления сетки.

Единственный способ, который я мог придумать, - это сохранить управляющие данные в переменной сеанса, но это будет безумием, если у вас есть сотни записей в виде сетки. и вы определенно не хотите, чтобы ваш сервер работал медленно.

Поэтому я настоятельно рекомендую обрабатывать состояние через базу данных, если у вас есть большое количество записей в представлении сетки.

person Ali    schedule 27.06.2014
comment
В конце концов я бы написал в базу данных, но я хочу сохранить состояние при пейджинге gridview. Допустим, пользователь выбирает несколько элементов в нескольких строках на 1-й странице, переходит на 4-ю страницу... выбирает еще несколько элементов, а затем возвращается на 1-ю страницу. Я хочу восстановить выбранные значения. - person user1550951; 27.06.2014
comment
Я знаю, что именно вы пытаетесь сделать, поскольку я сказал, что это выполнимо с использованием переменных сеанса, поэтому вам просто нужно установить контрольные значения для сеанса в событии grdUnit_PageIndexChanging. и использовать его в том же событии. - person Ali; 27.06.2014