如何将按钮连接到GridView中的复选框,并从GridView中删除所选行(通过GridView中集成的复选框勾选)
本文关键字:GridView 复选框 集成 通过 按钮 连接 并从 删除 | 更新日期: 2023-09-27 18:00:24
我创建了一个Gridview,其中包含从TextBox中提取的数据。我在GridView上有一个"删除链接",如果需要,可以从GridView中删除行。
现在我想对它做一些更改。我希望在GridView的每一行都有复选框,而不是在GridView上使用"删除链接"。在GridView之外,应该有一个按钮。单击该按钮后,应删除通过网格视图上的复选框选择的行。
要实现此功能,必须对以下代码进行哪些更改请明确说明更改。
默认.aspx
<%@ 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>
<br />
Employee
ID <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<br />
Employee Name <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<br />
Salary <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<br />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Add to Grid" OnClick="Button1_Click" />
<br />
<br />
<br />
<br />
<br />
<asp:Button ID="Button2" runat="server" Text="Export data to Database" OnClick="Button2_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
<br />
<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>
</Columns>
</asp:GridView>
</div>
<p style="width: 799px">
<asp:Button ID="Button3" runat="server" onclick="Button3_Click"
Text="Delete Checked items" Width="162px" />
</p>
<p>
</p>
<p>
</p>
<p>
<asp:GridView ID="GridView2" runat="server" BackColor="White"
BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" CellPadding="3"
Width="580px">
<PagerStyle HorizontalAlign="Left" />
</asp:GridView>
</p>
</form>
<p>
</p>
</body>
</html>
Sample.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_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridData();
}
void GridData()
{
GridView1.DataSource = (DataTable)Session["reptable"];
GridView1.DataBind();
}
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
GridData();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = GridView1.Rows[e.RowIndex];
string EmpID;
EmpID = GridView1.DataKeys[e.RowIndex].Value.ToString();
TextBox EmpName = (TextBox)row.FindControl("txtEmpName");
TextBox EmpSalary = (TextBox)row.FindControl("txtEmpSalary");
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();
}
}
Session.Remove("reptable");
Session["reptable"] = dt1;
//add that updated row here
dt = (DataTable)Session["reptable"];
dr1 = dt.NewRow();
dr1["EmpID"] = EmpID;
dr1["EmpName"] = EmpName.Text;
dr1["EmpSalary"] = EmpSalary.Text;
dt.Rows.Add(dr1);
Session.Remove("reptable");
Session["reptable"] = dt;
}
GridView1.EditIndex = -1;
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 = "";
}
//Bulk Insert data into sql server database
protected void Button2_Click(object sender, EventArgs e)
{
dt = (DataTable)Session["reptable"];
//Upload data to Database using bulk copy
SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.AppSettings["constring"]);
sqlBulk.DestinationTableName = "Emp"; //table name
sqlBulk.WriteToServer(dt);
//remove data after insert
dt.Clear();
Session["reptable"] = dt;
GridData();
Label1.Text = "All Records Inserted successfully into the database";
}
protected void Button3_Click(object sender, EventArgs e)
{
}
}
试试这个。。
ASPX代码:
在网格视图的项目模板中添加复选框控件。。
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkdelete" runat="server" />
</ItemTemplate>
</asp:TemplateField>
C#代码:
protected void Button3_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvrow in GridView1.Rows)
{
//Finiding checkbox control in gridview for particular row
CheckBox chkdelete = (CheckBox)gvrow.FindControl("chkdelete");
//Condition to check checkbox selected or not
if (chkdelete.Checked)
{
if (Session["reptable"] != null)
{
string EmpID = GridView1.DataKeys[gvrow.RowIndex].Value.ToString();
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();
}
ASPX:的变化
来自
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<%#Eval("EmpID")%>
</ItemTemplate>
</asp:TemplateField>
至
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<%#Eval("EmpID")%>
<asp:CheckBox ID="chkdelete" value='<%#Eval("EmpID")%>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
注意中的单个报价
value='<%#Eval("EmpID")%>'
代码背后的代码:
protected void Button3_Click(object sender, EventArgs e)
{
for(int i = 0; i< GridView1.Rows; i++)
{
If((GridView1.Rows[i].FindControl("ckhdelete") as CheckBox) != null && (GridView1.Rows[i].FindControl("ckhdelete") as CheckBox).checked)
{
//Delete dataRow with EmpID = convertToInt( (GridView1.Rows[i].FindControl("ckhdelete") as CheckBox).value);
}
}
}
编辑:在分页的情况下,这将不起作用,您将会话或设置一个限制,即只删除当前页面的行。