GridView中的CheckBox 翻页时记录选中状态
思路就是翻页的时候记录一下checkbox的选中状态 可以赋值给viewstate 或者session 都行这里我用的是 viewstate ,记录完了 在根据记录的选择状态 进库 或者是 给checkbox赋值
//页面加载时给GridView赋值
string[] B = ds.Tables[0].Rows[0]["KaoPingYuan"].ToString().Split(','); ArrayList al1 = new ArrayList(B); ViewState["CHECKED_ITEMS"] = al1;
RePopulateValues();
#region =考评员gridview1相关代码= private void RememberOldValues() { ArrayList categoryIDList = new ArrayList(); int index = -1; foreach (GridViewRow row in GridView1.Rows) { index = (int)GridView1.DataKeys[row.RowIndex].Value; bool result = ((CheckBox)row.FindControl("checkD")).Checked; if (ViewState["CHECKED_ITEMS"] != null) categoryIDList = (ArrayList)ViewState["CHECKED_ITEMS"]; if (result) { if (!categoryIDList.Contains(index)) categoryIDList.Add(index); } else categoryIDList.Remove(index); } if (categoryIDList != null && categoryIDList.Count > 0) ViewState["CHECKED_ITEMS"] = categoryIDList; } private void RePopulateValues() { ArrayList categoryIDList = (ArrayList)ViewState["CHECKED_ITEMS"]; if (categoryIDList != null && categoryIDList.Count > 0) { foreach (GridViewRow row in GridView1.Rows) { int index = (int)GridView1.DataKeys[row.RowIndex].Value; if (categoryIDList.Contains(index.ToString()))//这里如果你数据库里面存的是int形式的id 就不用tostring,但是因为是复选 储存形式大部分都是"id1,id2,id3,id4"的字符串这时候就需要把GridView1绑定的int型的id转成string才能判断是否相等。 { CheckBox myCheckBox = (CheckBox)row.FindControl("checkD"); myCheckBox.Checked = true; } } } } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { RememberOldValues(); GridView theGrid = sender as GridView; int newPageIndex = 0; if (-2 == e.NewPageIndex) { TextBox txtNewPageIndex = null; GridViewRow pagerRow = theGrid.BottomPagerRow; if (null != pagerRow) txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox; if (null != txtNewPageIndex) { if (Regex.IsMatch(txtNewPageIndex.Text, @"^\d+$")) newPageIndex = int.Parse(txtNewPageIndex.Text) - 1; else Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请输入数字');</script>"); } } else newPageIndex = e.NewPageIndex; newPageIndex = newPageIndex < 0 ? 0 : newPageIndex; newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex; theGrid.PageIndex = newPageIndex; LoadGrivdView1(); RePopulateValues(); } #endregion protected void LoadGrivdView1() { DataSet ds = db.db.GetDataSet("select * from tb_KPY"); GridView1.DataSource = ds; GridView1.DataBind(); }
<pre name="code" class="cpp">protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { RememberOldValues(); GridView theGrid = sender as GridView; int newPageIndex = 0; if (-2 == e.NewPageIndex) { TextBox txtNewPageIndex = null; GridViewRow pagerRow = theGrid.BottomPagerRow; if (null != pagerRow) txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox; if (null != txtNewPageIndex) { if (Regex.IsMatch(txtNewPageIndex.Text, @"^\d+$")) newPageIndex = int.Parse(txtNewPageIndex.Text) - 1; else Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('请输入数字');</script>"); } } else newPageIndex = e.NewPageIndex; newPageIndex = newPageIndex < 0 ? 0 : newPageIndex; newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex; theGrid.PageIndex = newPageIndex; LoadGrivdView1(); RePopulateValues(); }
//保存的时候进入数据库
<span style="white-space:pre"> </span> RememberOldValues(); string list = ""; string id = Guid.NewGuid().ToString(); ArrayList categoryIDList = new ArrayList(); categoryIDList = (ArrayList)ViewState["CHECKED_ITEMS"]; for (int i = 0; i < categoryIDList.Count; i++) { list += categoryIDList[i] + ","; } list.TrimEnd(',');
然后把list insert into 表就行了
前台gridview代码
<asp:GridView ID="GridView1" runat="server" RowStyle-HorizontalAlign="Center" AutoGenerateColumns="False" Width="100%" DataKeyNames="Userid" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" ForeColor="#333333"> <Columns> <asp:TemplateField Visible="false"> <ItemTemplate> <asp:Label ID="lbuserid" runat="server" Text='<%#Eval("Userid") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="选择"> <ItemTemplate> <asp:CheckBox ID="checkD" runat="server" /> </ItemTemplate> <ItemStyle BorderColor="#507CD1" HorizontalAlign="Center" BorderWidth="1px" /> </asp:TemplateField> <asp:BoundField HeaderText="姓名" DataField="name" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="性别" DataField="sex" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="出生年月" DataField="birthday" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="专业年限" DataField="workyear" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="技术等级" DataField="level" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="工作单位" DataField="company" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="电话" DataField="telephone" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> <asp:BoundField HeaderText="考评员证号" DataField="sno" ItemStyle-BorderColor="#507CD1" ItemStyle-HorizontalAlign="Center" ItemStyle-BorderWidth="1px"/> </Columns> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <PagerTemplate> <table style="font-size: 12px" width="100%"> <tbody> <tr> <td style="text-align: center"> 当前第: <asp:Label ID="LabelCurrentPage" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageIndex + 1 %>"></asp:Label> 页/共: <asp:Label ID="LabelPageCount" runat="server" Text="<%# ((GridView)Container.NamingContainer).PageCount %>"></asp:Label> 页 <asp:LinkButton ID="LinkButtonFirstPage" runat="server" CommandArgument="First" CommandName="Page" ForeColor="#666699" Visible='<%#((GridView)Container.NamingContainer).PageIndex != 0 %>'>首页</asp:LinkButton> <asp:LinkButton ID="LinkButtonPreviousPage" runat="server" CommandArgument="Prev" ForeColor="#666699" CommandName="Page" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'>上一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonNextPage" runat="server" CommandArgument="Next" CommandName="Page" ForeColor="#666699" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>下一页</asp:LinkButton> <asp:LinkButton ID="LinkButtonLastPage" runat="server" CommandArgument="Last" CommandName="Page" ForeColor="#666699" Visible='<%# ((GridView)Container.NamingContainer).PageIndex != ((GridView)Container.NamingContainer).PageCount - 1 %>'>尾页</asp:LinkButton> 转到第 <asp:TextBox ID="txtNewPageIndex" runat="server" Width="20px" Text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页 <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="-1" ForeColor="#666699" CommandName="Page" Text="GO" /> </td> </tr> </tbody> </table> </PagerTemplate> </asp:GridView>