[c#]GridView中实现全选、反选、删除所选的功能

.aspx页面代码:

<asp:Button CssClass="buttonnew60" ID="selAll" runat="server" Text="全选" OnClick="selAll_Click" />

<asp:Button CssClass="buttonnew60" ID="selUn" runat="server" Text="反选" OnClick="selUn_Click" />

<asp:Button CssClass="buttonnew60" ID="delSome" runat="server" Text="删除所选" OnClick="delSome_Click" />

<asp:GridView ID="citysList" AllowPaging="True" PageSize="10" BackColor="White" Width="98%" BorderWidth="0px" runat="server" AutoGenerateColumns="False" OnPageIndexChanging="citysList_PageIndexChanging">

<Columns>

<asp:TemplateField>

    <ItemTemplate>

      <tr>

        <td style="height:25px;"><div style="float:left; margin-left:10px;">

            <asp:CheckBox ID="CheckBox1" runat="server" />

          每行标题

        </td>

      </tr>

      <tr>

        <td style="height:1px;border-bottom:1px solid #C7D6E9;"></td>

      </tr>

    </ItemTemplate>

    <ItemStyle BackColor="White" Width="0px" />

</asp:TemplateField>

</Columns>

<PagerStyle Font-Bold="False" BackColor="White" Font-Size="12px" ForeColor="green" HorizontalAlign="Center" />

<PagerSettings FirstPageText="&amp;nbsp;&amp;nbsp;第一页&amp;nbsp;&amp;nbsp;" LastPageText="&amp;nbsp;&amp;nbsp;最后页 &amp;nbsp;&amp;nbsp;"

Mode="NextPreviousFirstLast" NextPageText="&amp;nbsp;&amp;nbsp;下一页&amp;nbsp;&amp;nbsp;"

PreviousPageText="&amp;nbsp;&amp;nbsp;上一页&amp;nbsp;&amp;nbsp;" />

</asp:GridView>

.aspx.cs后台代码:

    protected void selAll_Click(object sender, EventArgs e)

    {

        foreach (GridViewRow gvr in citysList.Rows)

        {

            ((CheckBox)gvr.FindControl("CheckBox1")).Checked = true;

            //全选:将所有CheckBox的Checked设为true

        }

    }

    protected void selUn_Click(object sender, EventArgs e)

    {

        foreach (GridViewRow gvr in citysList.Rows)

        {

            ((CheckBox)gvr.FindControl("CheckBox1")).Checked

              = !((CheckBox)gvr.FindControl("CheckBox1")).Checked;

            //反选:将所有CheckBox的Checked设为其本身:非值

        }

    }

    protected void delSome_Click(object sender, EventArgs e)

    {

        for (int i = 0; i < Convert.ToInt32(citysList.Rows.Count); i++)

        {

            if (((CheckBox)citysList.Rows[i].FindControl("CheckBox1")).Checked == true)

            {

                string yId = ((Label)citysList.Rows[i].FindControl("idlab")).Text;

                DB db = new DB();

                db.SetCommand("UPDATE citys_t SET del=1 WHERE yId=@yId");

                db.AddSqlParameter(new System.Data.SqlClient.SqlParameter("@yId", yId));

                db.ExecuteNonQuery();

                db.Dispose();

                //删除所选的:当CheckBox的Checked为true时删除

            }

        }

        this.loadCitys();

        //重新读列表付给GridView

    }

必须注意的:
Page_Load中必须对IsPostBack进行判断,不然每次Page_Load后CheckBox的Checked会被重置,因此我们要添加以下代码

protected void Page_Load(object sender, EventArgs e)

    {

        if (!IsPostBack)

        {

            this.loadCitys();

        }

    }

然而这样的话分页就会出问题,因此我们在分页处必须让其重新this.loadCitys()绑定数据

    protected void citysList_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        this.loadCitys();   //就是多添上这一句

        this.citysList.PageIndex = e.NewPageIndex;

        this.citysList.DataBind();

    }


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。