我怎样才能删除点击按钮在GridView选定行(使用复选框)? [英] How can I delete the selected rows (CheckBox used) from the GridView on click of a Button?

查看:107
本文介绍了我怎样才能删除点击按钮在GridView选定行(使用复选框)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含从一个TextBox提取多行数据(使用会话)的GridView。应该有对包含在每一行复选框选择要删除的行GridView的一列。 我在GridView外的按钮。在它的点击,所有选定行(使用复选框)在GridView应该是删除,从GridView控件。我不想在GridView上删除链接。

请对下面给出实现这一功能的code进行必要的修改。

的Default.aspx

 <身体GT;
    <表ID =form1的=服务器>
    < D​​IV>< ASP:按钮的ID =Button1的=服务器文本=添加到网格的OnClick =的button1_Click/>
        < BR />< ASP:GridView控件ID =GridView1=服务器的DataKeyNames =的EmpID的AutoGenerateColumns =假
    OnRowEditing =GridView1_RowEditingOnRowCancelingEdit =GridView1_RowCancelingEdit
    OnRowDeleting =GridView1_RowDeletingOnPageIndexChanging =GridView1_PageIndexChanging
    每页=5AllowPaging =真OnRowUpdating =GridView1_RowUpdatingWIDTH =800>
    <柱体和GT;
        < ASP:的TemplateField的HeaderText =雇员ID>
            <&ItemTemplate中GT;
                <%#的eval(的EmpID)%>
            < / ItemTemplate中>
        < / ASP:的TemplateField>
        < ASP:的TemplateField的HeaderText =员工姓名>
            <&ItemTemplate中GT;
                <%#的eval(EmpName)%>
            < / ItemTemplate中>
            <&EditItemTemplate的GT;
                < ASP:文本框ID =txtEmpName=服务器文本='<%#的eval(EmpName)%>'>< / ASP:文本框>
            < / EditItemTemplate中>
        < / ASP:的TemplateField>
        < ASP:的TemplateField的HeaderText =工资>
            <&ItemTemplate中GT;
                <%#的eval(EmpSalary)%>
            < / ItemTemplate中>
            <&EditItemTemplate的GT;
                < ASP:文本框ID =txtEmpSalary=服务器文本='<%#的eval(EmpSalary)%>'>< / ASP:文本框>
            < / EditItemTemplate中>
        < / ASP:的TemplateField>
        < ASP:CommandField中的HeaderText =修改ShowEditButton =真的EditText =编辑>
            < ControlStyle宽度=50/>
        < / ASP:CommandField中>
        < ASP:的TemplateField的HeaderText =删除>
            <&ItemTemplate中GT;
                < ASP:LinkBut​​ton的ID =lnkDelete的CommandName =删除=服务器的OnClientClick =返回确认('您确定要删除这些记录?');>删除< / ASP:LinkBut​​ton的>
            < / ItemTemplate中>
        < / ASP:的TemplateField>        **< ASP:的TemplateField的HeaderText =嘀删除行>
            <&ItemTemplate中GT;
                < ASP:复选框ID =chkDelete=服务器文本=选择/>
            < / ItemTemplate中>
            <&HeaderTemplate中GT;
            < / HeaderTemplate中>
        < / ASP:的TemplateField> **    < /专栏>< / ASP:GridView的>< / DIV>< p =风格宽度:799px>
 < ASP:按钮的ID =按钮3=服务器的onclick =Button3_Click文本=删除选中的项WIDTH =162px/>< / P>< /身体GT;

default.aspx.cs

 使用系统;
System.Collections中使用;
使用System.Collections.Generic;
使用System.Configuration;
使用的System.Web;
使用System.Web.Security;
使用System.Web.UI程序;
使用System.Web.UI.HtmlControls;
使用System.Web.UI.WebControls;
使用System.Web.UI.WebControls.WebParts;
使用System.Linq的;
使用System.Xml.Linq的;
使用System.Data这;
使用System.Data.SqlClient的;公共部分类_Default:System.Web.UI.Page
{
    SqlConnection的sqlcon =新的SqlConnection(ConfigurationManager.AppSettings [constring]);
    SQLCMD的SqlCommand =新的SqlCommand();
    SqlDataAdapter的大=新的SqlDataAdapter();
    DataTable的DT =新的DataTable();
    DataTable的DT1 =新的DataTable();
    DataRow的博士;
    DataRow的DR1;
    DataSet的DS =新的DataSet();    保护无效的Page_Load(对象发件人,EventArgs的发送)
    {
        Label1.Text =;
        //lbldbmsg.Text =;
        如果(!Page.IsPostBack)
        {
            dt.Columns.Add(的EmpID);
            dt.Columns.Add(EmpName);
            dt.Columns.Add(EmpSalary);
            会话[reptable] = DT;
            的GridData();
        }
    }保护无效GridView1_RowDeleting(对象发件人,GridViewDeleteEventArgs E)
    {
        字符串的EmpID;
        的EmpID = GridView1.DataKeys [e.RowIndex] .Value.ToString();
        如果(会话[reptable]!= NULL)
        {
            DataTable的DT1 =新的DataTable();
            dt1.Clear();
            DT1 =会话[reptable]作为数据表;
            的for(int i = 0; I< = dt1.Rows.Count - 1;我++)
            {
                DataRow的博士;
                如果(dt1.Rows [I] [0]的ToString()==的EmpID)
                {
                    博士= dt1.Rows [I]
                    dt1.Rows [I] .Delete();
                    //dt1.Rows.Remove(dr);
                }
            }
            Session.Remove(reptable);
            会话[reptable] = DT1;
        }
        的GridData();
    }    保护无效GridView1_PageIndexChanging(对象发件人,GridViewPageEventArgs E)
    {
        GridView1.PageIndex = e.NewPageIndex;
        的GridData();
    }保护无效的button1_Click(对象发件人,EventArgs的发送)
    {
        DT =(数据表)会议[reptable];
        博士= dt.NewRow();
        博士[的EmpID] = TextBox1.Text;
        博士[EmpName] = TextBox2.Text;
        博士[EmpSalary] = TextBox3.Text;
        dt.Rows.Add(DR);
        Session.Remove(reptable);
        会话[reptable] = DT;
        的GridData();
        TextBox1.Text =;
        TextBox2.Text =;
        TextBox3.Text =;
    }保护无效Button3_Click(对象发件人,EventArgs的发送)
   {   }
}


解决方案

这真的很简单,所有你需要做的是:


  1. 循环通过网格中的删除按钮视图中的行OnClick事件

  2. 找到每一行中删除复选框,然后看它是否是打勾

  3. 实施你删除逻辑

下面是一个例子,我相信你可以改变它根据需要为您的方案工作:

 保护无效DeleteClick(对象发件人,EventArgs的发送)
    {
        的for(int i = 0; I< GridView1.Rows.Count;我++)
        {
            复选框chkDelete = GridView1.Rows [I] .FindControl(chkDelete)的复选框;
            如果(chkDelete = NULL&放大器;!&安培; chkDelete.Checked)
            {
                //删除项目
            }
        }
    }

更新:

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

 保护无效DeleteClick(对象发件人,EventArgs的发送)
{
    数据表表=(数据表)会议[reptable];
    的for(int i = 0; I< GridView1.Rows.Count;我++)
    {
        复选框chkDelete = GridView1.Rows [I] .FindControl(chkDelete)的复选框;
        如果(chkDelete = NULL&放大器;!&安培; chkDelete.Checked)
        {
            VAR EMPID = GridView1.DataKeys [I] [的EmpID];
            DataRow的博士=表格。选取(的String.Format(的EmpID = {0},EMPID))第一()。
            如果(DR!= NULL)
            dr.Delete();
        }
    }
    //这里重新绑定网格视图以查看更改例如
    GridView1.DataSource =表;
    GridView1.DataBind();
}

I have a GridView containing multiple rows (using Sessions) of data extracted from a TextBox. There should be a column on the GridView containing CheckBoxes on every row to select the rows to be deleted. I have a Button outside the GridView. On click of it, all the selected rows (using CheckBox) from the GridView should be "Deleted" from the GridView. I do not want a "Delete Link" on the GridView.

Please make the necessary changes to the code given below to implement this functionality.

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)
   {

   }
}

解决方案

It's quite simple really, all you have to do is:

  1. Loop through the grid view rows in your Delete buttons OnClick event
  2. Find the delete check box in each row and see whether it's ticked
  3. Implement your delete logic

Here's an example, I'm sure you can change it as needed to work for your scenario:

    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
            }
        }
    }

Update:

Here's an example of how to delete the rows

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();
}

这篇关于我怎样才能删除点击按钮在GridView选定行(使用复选框)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆