GridView和CheckBox连用,实现全选,分页,并且分页之后选择的复选框的状态依然存在

来源:互联网 发布:qq imap服务器 端口 编辑:程序博客网 时间:2024/05/21 21:37

页面代码:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
  按产品名称模糊查询: <asp:TextBox ID="pname" runat="server"></asp:TextBox> <asp:Button  ID="chaxun" Text="查询" runat="server" OnClick="chaxun_Click" />
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True"  Width="100%" AutoGenerateColumns="False"  DataKeyNames="ProductID" DataSourceID="SqlDataSource1" OnPageIndexChanged="GridView1_PageIndexChanged" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowDataBound="GridView1_RowDataBound" >
          
            <Columns>
           <asp:TemplateField HeaderText="全选">
           <ItemTemplate>
           <asp:CheckBox  ID="cb" runat ="server" />
           </ItemTemplate>
           <HeaderTemplate>
            <asp:CheckBox  ID="quanxuan" runat="server"  Text="全选" OnCheckedChanged="quanxuan_CheckedChanged"  AutoPostBack="true"/>
           </HeaderTemplate>
           </asp:TemplateField>
         
                <asp:BoundField DataField="ProductID" HeaderText="产品编号" InsertVisible="False"
                    ReadOnly="True" SortExpression="ProductID" />
                <asp:BoundField DataField="ProductName" HeaderText="产品名称" SortExpression="ProductName" />
                <asp:BoundField DataField="UnitPrice" HeaderText="单价" SortExpression="UnitPrice" DataFormatString="{0:c}元" />
            </Columns>
            <FooterStyle BackColor="Teal" />
            <PagerStyle BackColor="Teal" />
            <HeaderStyle BackColor="Teal" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
            SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products]"></asp:SqlDataSource>
        <br />
        <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
            SelectCommand="SELECT [ProductID], [ProductName], [UnitPrice] FROM [Products] WHERE ([ProductName] LIKE '%' + @ProductName + '%')">
            <SelectParameters>
                <asp:FormParameter FormField="pname" Name="ProductName" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

 

服务器代码:

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI.MobileControls;


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            bind();

        }
    }
    protected void quanxuan_CheckedChanged(object sender, EventArgs e)
    {

        foreach (GridViewRow gr in GridView1.Rows)
        {
            CheckBox cb = gr.FindControl("cb") as CheckBox;
            if (cb.Checked == false)
            {
                cb.Checked = true;
            }
            else
            {
                cb.Checked = false;
            }
        }

    }

 

    protected void chaxun_Click(object sender, EventArgs e)
    {
        Session["datasourse"] = "SqlDataSource2";
        bind();

    }

    protected void bind()
    {
        if (Session["datasourse"] == null)
        {
            GridView1.DataSourceID = "SqlDataSource1";
        }
        else
        {
            GridView1.DataSourceID = (string)Session["datasourse"];
        }
        GridView1.DataBind();
    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        if (Session["data"] == null)
        {
            List datanew = new List();
            Session["data"] = datanew;
        }
        List data = (List)Session["data"];
        GridView1.PageIndex = e.NewPageIndex;
        for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
        {
            CheckBox cb = GridView1.Rows[i].FindControl("cb") as CheckBox;
            if (cb.Checked)
            {
                string pid = GridView1.DataKeys[i].Value.ToString();
          
                if (!data.Items.Contains(pid))  //判断list集合里是否包含这个元素
                {
                    data.Items.Add(pid);
                }
                   
            }
            else   //如果取消选择,那么就从list集合利去除这个元素
            {
                string pid = GridView1.DataKeys[i].Value.ToString();
                data.Items.Remove(pid);
            }
        }
        Session["data"] = data;
        bind();
    }

    protected void GridView1_PageIndexChanged(object sender, EventArgs e)
    {

    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (Session["data"] != null)
            {
                List data = (List)Session["data"];
                if (data.Items.Count > 0)
                {
                    for (int j = 0; j < data.Items.Count; j++)
                    {
                        string ProductId = e.Row.Cells[1].Text;
                        if (ProductId == data.Items[j].Value.ToString())
                        {
                            CheckBox cb = ((CheckBox)e.Row.FindControl("cb"));
                            cb.Checked = true;
                        }
                    }
                }
            }
        }

    }
}

 

代码不是很难的,所以没有写注释

原创粉丝点击