代码之家  ›  专栏  ›  技术社区  ›  hud

在asp.net中维护分页时选中复选框的ViewState

  •  0
  • hud  · 技术社区  · 5 年前

    我有一个 Gridview 有一些数据。其中我有5排 paging . 每当我查看 checkbox 在第一页,转到第二页,我再次来到第一页。这个 复选框 检查值将消失。

    选中的值不会保留。如何让它保持 viewstate

    代码:

    <asp:GridView ID="grdDisplayCMMData" runat="server" AutoGenerateColumns="false" Width="100%" ShowHeaderWhenEmpty="true" CssClass="heavyTable table" EmptyDataText="No records to display"
                AllowPaging="true" PageSize="2" OnPageIndexChanging="grdDisplayCMMData_PageIndexChanging">
                <Columns>                    
                    <asp:TemplateField HeaderText="ID" Visible="false">
                        <ItemTemplate>
                            <asp:Label ID="lblID_CMM" runat="server" Text='<%#Eval("ID") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="SAP ID">
                        <ItemTemplate>
                            <asp:Label ID="lblSAP_ID_CMM" runat="server" Text='<%#Eval("SAP_ID") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ID OD CHANGE">
                        <ItemTemplate>
                            <asp:Label ID="lblID_OD_COUNTCHANGE_CMM" runat="server" Text='<%#Eval("ID_OD_COUNTCHANGE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="ID OD CHANGE DATE">
                        <ItemTemplate>
                            <asp:Label ID="lblID_OD_CHANGEDDATE_CMM" runat="server" Text='<%#Eval("ID_OD_CHANGEDDATE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="RRH COUNT CHANGE">
                        <ItemTemplate>
                            <asp:Label ID="lblRRH_COUNTCHANGE_CMM" runat="server" Text='<%#Eval("RRH_COUNTCHANGE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="RRH COUNT CHANGE DATE">
                        <ItemTemplate>
                            <asp:Label ID="lblRRH_CHANGEDDATE_CMM" runat="server" Text='<%#Eval("RRH_CHANGEDDATE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="TENANCY COUNT CHANGE">
                        <ItemTemplate>
                            <asp:Label ID="lblTENANCY_COUNTCHANGE_CMM" runat="server" Text='<%#Eval("TENANCY_COUNTCHANGE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="TENANCY COUNT CHANGE DATE">
                        <ItemTemplate>
                            <asp:Label ID="lblTENANCY_CHANGEDDATE_CMM" runat="server" Text='<%#Eval("TENANCY_CHANGEDDATE") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="STATUS">
                        <ItemTemplate>
                            <asp:Label ID="lblSTATUS_CMM" runat="server" Text='<%#Eval("STATUS") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CREATED BY" Visible="false">
                        <ItemTemplate>
                            <asp:Label ID="lblCREATEDBY_CMM" runat="server" Text='<%#Eval("CREATED_BY") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Approve/Reject">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkApprRejCMM" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>                
            </asp:GridView>
    

    服务器代码

    protected void grdDisplayCMMData_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                BindCMMData();
                grdDisplayCMMData.PageIndex = e.NewPageIndex;
                grdDisplayCMMData.DataBind();               
            }
            catch (Exception ex)
            {
                string strErrorMsg = ex.Message.ToString() + " " + "StackTrace :" + ex.StackTrace.ToString();
                CommonDB.WriteLog("ERROR:" + strErrorMsg, ConfigurationManager.AppSettings["IPCOLO_LOG"].ToString());
            }
        }
    

    如果还需要什么,请告诉我

    2 回复  |  直到 5 年前
        1
  •  1
  •   cdev    5 年前

    微软提供了一个例子 here .

        2
  •  0
  •   Alen Genzić    5 年前

    要在页面之间传输数据,不能使用viewstate。

    传输数据的选项 页面是会话存储,通过查询字符串传输或将所需的值存储到某种数据库中。

    最基本级别的会话存储示例:

    在第一页:

    Session["CheckboxValue"] = chkSomeCheckbox.Checked;
    

    在第二页:

    bool isCheckboxChecked = Convert.ToBoolean(Session["CheckboxValue"])