在gridview asp.net中维护checkboxlist的状态

时间:2014-06-27 06:17:32

标签: c# asp.net gridview checkboxlist

我在gridview的其中一列中有一个checkboxlist(有4个listitems)。它没有从database填充。我想在我导航到另一个页面时保持所有列表项的状态(选中或取消选中) gridview。我已经尝试为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>

背后的代码:

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之外维护一个复选框列表的状态但是没有帮助。我无法找到一种方法来维护checkboxlist的状态(在gridview中)并将其保存到数据库中。

1 个答案:

答案 0 :(得分:0)

无论您是否设置EnableViewstate="true",当您的控件(CheckBoxList)未填充或未从数据库检查时,您的控件将在您调用网格时丢失已检查的数据-view DataBind方法。

我能想到的唯一方法是将控制数据保存在Session变量中,但如果你的网格视图中有数百条记录,这将是疯狂的。而你不想让你的服务器慢一点。

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