Reputation: 85
I have created a Gridview containing data extracted from a TextBox. I have a "Delete Link" on the GridView to delete the row from the GridView if required.
Now I want to make some changes to it. Instead of the "Delete link" on the GridView, I want Checkboxes on each row of the GridView. Outside the GridView, there should be a Button. On clicking that button, the rows selected via the Checkbox on the Gridview should be deleted.
What changes has to be made to the below code to implement this functionality? Please specify the changes clearly.
Default.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)
{
}
}
Upvotes: 1
Views: 2908
Reputation: 2000
Try this..
ASPX Code:
Add checkbox control in item template of your gridview..
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkdelete" runat="server" />
</ItemTemplate>
</asp:TemplateField>
C# code:
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();
}
Upvotes: 1
Reputation: 460
change in ASPX:
from
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<%#Eval("EmpID")%>
</ItemTemplate>
</asp:TemplateField>
to
<asp:TemplateField HeaderText="Employee ID">
<ItemTemplate>
<%#Eval("EmpID")%>
<asp:CheckBox ID="chkdelete" value='<%#Eval("EmpID")%>' runat="server" />
</ItemTemplate>
</asp:TemplateField>
Note the single quote in
value='<%#Eval("EmpID")%>'
Code for code behind:
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);
}
}
}
EDIT: This will not work in case of paging, you will sessions or place a limitation the current page's rows will only be delete.
Upvotes: 0