2013-02-21 21 views
1

我已經創建了一個包含從文本框中提取的數據的GridView。如果需要,我在GridView上有一個「刪除鏈接」來從GridView中刪除該行。如何將按鈕連接到GridView中的複選框,並從GridView中刪除選定的行(通過在GridView中集成的複選框打勾)?

現在我想對它進行一些更改。而不是在GridView上的「刪除鏈接」,我想GridView的每一行上的複選框。在GridView之外,應該有一個Button。單擊該按鈕時,應該刪除通過GridView上的複選框選擇的行。

要實現此功能,下面的代碼需要做什麼修改?請清楚說明更改。

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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <br /> 
     <br /> 
     Employee Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     <br /> 
     <br /> 
     Salary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     <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"> 
     &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     <asp:Button ID="Button3" runat="server" onclick="Button3_Click" 
      Text="Delete Checked items" Width="162px" /> 
    </p> 
    <p> 
     &nbsp;</p> 
    <p> 
     &nbsp;</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> 
     &nbsp;</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) 
    { 

    } 
} 

回答

1

試試這個..

ASPX代碼

添加CheckBox控件在你的GridView的項目模板..

<asp:TemplateField> 
<ItemTemplate> 
<asp:CheckBox ID="chkdelete" runat="server" /> 
</ItemTemplate> 
</asp:TemplateField> 

C#代碼:在ASPX

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

我有什麼代碼這裏面:如果(chkdelete.Checked) – Fahhad 2013-02-21 09:03:13

+0

什麼是刪除該行的代碼{// 刪除行 代碼}? – Fahhad 2013-02-21 09:10:45

+0

@Fahhad我已更新我的答案檢查出來...... – coder 2013-02-21 09:47:50

0

變化:

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

編輯: 這不會在分頁的情況下工作,你會會議或將限制當前頁面的行只會被刪除。