2013-02-21 55 views
0

我有一個GridView包含多行(使用Sessions)從TextBox中提取的數據。在每行的GridView上應該有一個包含CheckBoxes的列來選擇要刪除的行。 我有一個GridView外的按鈕。點擊它,GridView中所有選中的行(使用CheckBox)應該從GridView中「刪除」。我不想在GridView上使用「刪除鏈接」。如何從GridView中刪除選中的行(使用CheckBox),然後單擊一個按鈕?

請對下面給出的代碼進行必要的更改以實現此功能。

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

    } 
} 

回答

0

您可以在girdview而不是複選框使用ButtonField字段,然後你可以rowcommand事件你的GridView添加這裏是一個例子:
Gridview rowcommand

3

這真的很簡單,所有你需要做的是:

  1. 循環通過網格視圖中的行中的刪除按鈕OnClick事件
  2. 查找刪除複選框每一行,看看是否它打勾
  3. 實現你刪除邏輯

下面是一個例子,我相信你可以改變它根據需要爲您的方案工作:

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

更新:

這裏有一個如何刪除行

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

但是我怎麼刪除項目的例子嗎? – Fahhad 2013-02-21 08:35:14

+0

首先,您需要創建一個存儲過程,以刪除僱員表中的記錄,並將僱員ID作爲參數。您將創建一個SqlCommand來調用此過程並傳遞「勾號」行的僱員ID。只需搜索爲「SqlCommand從gridview asp.net刪除行」在網上有很多例子:-) – 2013-02-21 08:41:25

+0

但我沒有從數據庫中存儲GridView的任何數據。它只顯示從文本框中提取的數據。 – Fahhad 2013-02-21 08:46:40

2
foreach (GridViewRow row in GridView1.Rows) 
{ 
    CheckBox checkbox1 = (CheckBox)row.FindControl("checkboxdelete"); 
    if (checkbox1.Checked) 
    { 
     int (primrary key) = Convert.ToInt32(GridView1.DataKeys[row.RowIndex].Value.ToString()); 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("delete from student where Primrarykey = @Primrarykey ", con); 
     cmd.CommandType = CommandType.Text; 
     cmd.Parameters.Add("Primrarykey", SqlDbType.Int).Value = Primrarykey.ToString(); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     cmd.Dispose(); 
    } 
} 
grdview_bnd(); 
} 
相關問題