C# 如何在单击按钮时从GridView中删除所选行(使用复选框)?

C# 如何在单击按钮时从GridView中删除所选行(使用复选框)?,c#,asp.net,sql-server,web-applications,gridview,C#,Asp.net,Sql Server,Web Applications,Gridview,我有一个GridView,其中包含从文本框中提取的多行(使用会话)数据。GridView上应该有一列,每行包含复选框,用于选择要删除的行我在GridView外有一个按钮。单击它,GridView中的所有选定行(使用复选框)都应从GridView中“删除”。我不想要GridView上的“删除链接”。 请对下面给出的代码进行必要的更改以实现此功能。 default.aspx <body> <form id="form1" runat="server"> <

我有一个GridView,其中包含从文本框中提取的多行(使用会话)数据。GridView上应该有一列,每行包含复选框,用于选择要删除的行我在GridView外有一个按钮。单击它,GridView中的所有选定行(使用复选框)都应从GridView中“删除”。我不想要GridView上的“删除链接”。

请对下面给出的代码进行必要的更改以实现此功能。

default.aspx

<body>
    <form id="form1" runat="server">
    <div>

<asp:Button ID="Button1" runat="server" Text="Add to Grid" OnClick="Button1_Click" />
        <br />

<asp:GridView ID="GridView1" runat="server" DataKeyNames="EmpID" AutoGenerateColumns="false"
    OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit"
    OnRowDeleting="GridView1_RowDeleting" OnPageIndexChanging="GridView1_PageIndexChanging"
    PageSize="5" AllowPaging="true" OnRowUpdating="GridView1_RowUpdating" Width="800">
    <Columns>
        <asp:TemplateField HeaderText="Employee ID">
            <ItemTemplate>
                <%#Eval("EmpID")%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Employee Name">
            <ItemTemplate>
                <%#Eval("EmpName")%>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEmpName" runat="server" Text='<%#Eval("EmpName") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Salary">
            <ItemTemplate>
                <%#Eval("EmpSalary")%>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEmpSalary" runat="server" Text='<%#Eval("EmpSalary") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:CommandField HeaderText="Modify" ShowEditButton="true" EditText="Edit">
            <ControlStyle Width="50" />
        </asp:CommandField>
        <asp:TemplateField HeaderText="Delete">
            <ItemTemplate>
                <asp:LinkButton ID="lnkDelete" CommandName="Delete" runat="server" OnClientClick="return confirm('Are you sure you want to delete these records?');">Delete</asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>

        **<asp:TemplateField HeaderText="Tick to Delete Rows">
            <ItemTemplate>
                <asp:CheckBox ID="chkDelete" runat="server" Text="Select" />
            </ItemTemplate>
            <HeaderTemplate>
            </HeaderTemplate>
        </asp:TemplateField>**

    </Columns>

</asp:GridView>

</div>

<p style="width: 799px">       
 <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="Delete Checked items" Width="162px" /></p>

</body>


删除 ** **

default.aspx.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Linq;
using System.Xml.Linq;
using System.Data;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.AppSettings["constring"]);
    SqlCommand sqlcmd = new SqlCommand();
    SqlDataAdapter da = new SqlDataAdapter();
    DataTable dt = new DataTable();
    DataTable dt1 = new DataTable();
    DataRow dr;
    DataRow dr1;
    DataSet ds = new DataSet();

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = "";
        //lbldbmsg.Text = "";
        if (!Page.IsPostBack)
        {
            dt.Columns.Add("EmpID");
            dt.Columns.Add("EmpName");
            dt.Columns.Add("EmpSalary");
            Session["reptable"] = dt;
            GridData();            
        }
    }

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string EmpID;
        EmpID = GridView1.DataKeys[e.RowIndex].Value.ToString();
        if (Session["reptable"] != null)
        {
            DataTable dt1 = new DataTable();
            dt1.Clear();
            dt1 = Session["reptable"] as DataTable;
            for (int i = 0; i <= dt1.Rows.Count - 1; i++)
            {
                DataRow dr;
                if (dt1.Rows[i][0].ToString() == EmpID)
                {
                    dr = dt1.Rows[i];
                    dt1.Rows[i].Delete();
                    //dt1.Rows.Remove(dr);
                }
            }
            Session.Remove("reptable");
            Session["reptable"] = dt1;
        }
        GridData();
    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        GridData();
    }

protected void Button1_Click(object sender, EventArgs e)
    {
        dt = (DataTable)Session["reptable"];
        dr = dt.NewRow();
        dr["EmpID"] = TextBox1.Text;
        dr["EmpName"] = TextBox2.Text;
        dr["EmpSalary"] = TextBox3.Text;
        dt.Rows.Add(dr);
        Session.Remove("reptable");
        Session["reptable"] = dt;
        GridData();
        TextBox1.Text = "";
        TextBox2.Text = "";
        TextBox3.Text = "";
    }

protected void Button3_Click(object sender, EventArgs e)
   {

   }
}
使用系统;
使用系统集合;
使用System.Collections.Generic;
使用系统配置;
使用System.Web;
使用System.Web.Security;
使用System.Web.UI;
使用System.Web.UI.HTMLControl;
使用System.Web.UI.WebControl;
使用System.Web.UI.WebControl.WebParts;
使用System.Linq;
使用System.Xml.Linq;
使用系统数据;
使用System.Data.SqlClient;
公共部分类\u默认值:System.Web.UI.Page
{
SqlConnection sqlcon=newsqlconnection(ConfigurationManager.AppSettings[“constring”]);
SqlCommand sqlcmd=新的SqlCommand();
SqlDataAdapter da=新的SqlDataAdapter();
DataTable dt=新的DataTable();
DataTable dt1=新DataTable();
数据行dr;
数据行dr1;
数据集ds=新数据集();
受保护的无效页面加载(对象发送方、事件参数e)
{
标签1.Text=“”;
//lbldbmsg.Text=“”;
如果(!Page.IsPostBack)
{
dt.列。添加(“EmpID”);
dt.列。添加(“EmpName”);
dt.列。添加(“EMPALARY”);
会话[“reptable”]=dt;
GridData();
}
}
受保护的无效GridView1_行删除(对象发送方,GridViewDeleteEventArgs e)
{
字符串EmpID;
EmpID=GridView1.DataKeys[e.RowIndex].Value.ToString();
if(会话[“reptable”]!=null)
{
DataTable dt1=新DataTable();
dt1.Clear();
dt1=会话[“reptable”]作为数据表;

对于(int i=0;i您可以在girdview中使用buttonfield而不是checkbox,然后您可以将rowcommand事件添加到gridview中,例如:

您可以在girdview中使用buttonfield而不是checkbox,然后您可以将rowcommand事件添加到gridview中,例如:

其实很简单,你所要做的就是:

  • 在Delete buttons OnClick事件中循环浏览网格视图行
  • 在每行中找到“删除”复选框,并查看是否勾选了该复选框
  • 实现您的删除逻辑
  • 下面是一个示例,我相信您可以根据需要对其进行更改,以适应您的场景:

        protected void DeleteClick(object sender,EventArgs e)
        {
            for (int i=0; i < GridView1.Rows.Count;i++)
            {
                CheckBox chkDelete = GridView1.Rows[i].FindControl("chkDelete") as CheckBox;
                if (chkDelete != null && chkDelete.Checked)
                {
                    //Delete the item
                }
            }
        }
    
    protectedvoid DeleteClick(对象发送方,事件参数e)
    {
    for(int i=0;i
    更新:

    下面是一个如何删除行的示例

    protected void DeleteClick(object sender,EventArgs e)
    {
        DataTable table = (DataTable)Session["reptable"];
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            CheckBox chkDelete = GridView1.Rows[i].FindControl("chkDelete") as CheckBox;
            if (chkDelete != null && chkDelete.Checked)
            {
                var empId = GridView1.DataKeys[i]["EmpID"];
                DataRow dr = table.Select(String.Format("EmpID={0}", empId)).First();
                if (dr != null)
                dr.Delete();
            }
        }
        //Rebind your grid view here to view the changes e.g
        GridView1.DataSource = table;
        GridView1.DataBind();
    }
    
    protectedvoid DeleteClick(对象发送方,事件参数e)
    {
    DataTable=(DataTable)会话[“reptable”];
    对于(int i=0;i
    这真的很简单,你所要做的就是:

  • 在Delete buttons OnClick事件中循环浏览网格视图行
  • 在每行中找到“删除”复选框,并查看是否勾选了该复选框
  • 实现您的删除逻辑
  • 下面是一个示例,我相信您可以根据需要对其进行更改,以适应您的场景:

        protected void DeleteClick(object sender,EventArgs e)
        {
            for (int i=0; i < GridView1.Rows.Count;i++)
            {
                CheckBox chkDelete = GridView1.Rows[i].FindControl("chkDelete") as CheckBox;
                if (chkDelete != null && chkDelete.Checked)
                {
                    //Delete the item
                }
            }
        }
    
    protectedvoid DeleteClick(对象发送方,事件参数e)
    {
    for(int i=0;i
    更新:

    下面是一个如何删除行的示例

    protected void DeleteClick(object sender,EventArgs e)
    {
        DataTable table = (DataTable)Session["reptable"];
        for (int i = 0; i < GridView1.Rows.Count; i++)
        {
            CheckBox chkDelete = GridView1.Rows[i].FindControl("chkDelete") as CheckBox;
            if (chkDelete != null && chkDelete.Checked)
            {
                var empId = GridView1.DataKeys[i]["EmpID"];
                DataRow dr = table.Select(String.Format("EmpID={0}", empId)).First();
                if (dr != null)
                dr.Delete();
            }
        }
        //Rebind your grid view here to view the changes e.g
        GridView1.DataSource = table;
        GridView1.DataBind();
    }
    
    protectedvoid DeleteClick(对象发送方,事件参数e)
    {
    DataTable=(DataTable)会话[“reptable”];
    对于(int i=0;i
    但是如何删除该项呢?首先,您需要创建一个存储过程来从数据库中删除记录