Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在gridview asp.net中维护复选框列表的状态_C#_Asp.net_Gridview_Checkboxlist - Fatal编程技术网

C# 在gridview asp.net中维护复选框列表的状态

C# 在gridview asp.net中维护复选框列表的状态,c#,asp.net,gridview,checkboxlist,C#,Asp.net,Gridview,Checkboxlist,我在gridview的一列中有一个复选框列表(包含4个listitems)。它不是从数据库中填充的。我想在导航到gridview的另一页时保持所有listitems(选中或未选中)的状态。我已尝试为gridview和checkboxlist设置EnableViewstate=“true”,但它不起作用。以下是html标记: <asp:GridView ID="grdUnits" runat="server" AutoGenerateColumns="false"

我在gridview的一列中有一个复选框列表(包含4个listitems)。它不是从数据库中填充的。我想在导航到gridview的另一页时保持所有listitems(选中或未选中)的状态。我已尝试为gridview和checkboxlist设置
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>

我遇到过一些帖子提到在gridvew之外维护复选框列表的状态,但这并没有什么帮助。我无法找到一种方法来维护复选框列表(位于gridview中)的状态并将其保存到数据库中。

当控件(复选框列表)运行时,设置
EnableViewstate=“true”
与否无关未填充或未从数据库检查控件将在调用网格视图数据绑定方法时丢失已检查的数据

我能想到的唯一方法是将控制数据保存在会话变量中,但如果网格视图中有数百条记录,这将是非常愚蠢的。你肯定不想让你的服务器变慢


因此,如果网格视图中有大量记录,我强烈建议通过数据库处理状态

看到这个@AmitKumar:我读了这篇文章,但因为它是用于复选框的,所以对我没有帮助。我最终会写入数据库,但我想在分页gridview时保持状态。假设用户在第一页的几行中选择了一些项,跳转到第4页…选择更多的项目,然后返回到第1页。我想还原所选的值。我知道您正试图做什么,正如我所说的,使用会话变量这是可行的,因此您只需要在
grdUnit_PageIndexChanging
事件中为会话设置控制值。并在同一事件中使用它。
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();
}