我怎样才能删除点击按钮在GridView选定行(使用复选框)? [英] How can I delete the selected rows (CheckBox used) from the GridView on click of a Button?
问题描述
我有一个包含从一个TextBox提取多行数据(使用会话)的GridView。应该有对包含在每一行复选框选择要删除的行GridView的一列。 我在GridView外的按钮。在它的点击,所有选定行(使用复选框)在GridView应该是删除,从GridView控件。我不想在GridView上删除链接。
请对下面给出实现这一功能的code进行必要的修改。
的Default.aspx
<身体GT;
<表ID =form1的=服务器>
< DIV>< 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:LinkButton的ID =lnkDelete的CommandName =删除=服务器的OnClientClick =返回确认('您确定要删除这些记录?');>删除< / ASP:LinkButton的>
< / 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的发送)
{ }
}
这真的很简单,所有你需要做的是:
- 循环通过网格中的删除按钮视图中的行OnClick事件
- 找到每一行中删除复选框,然后看它是否是打勾
- 实施你删除逻辑
下面是一个例子,我相信你可以改变它根据需要为您的方案工作:
保护无效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:
- Loop through the grid view rows in your Delete buttons OnClick event
- Find the delete check box in each row and see whether it's ticked
- 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屋!