2016-08-01 58 views
0
<asp:GridView ID="GridView1" runat="server" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None">   
<AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
      <Columns> 

       <asp:TemplateField HeaderText="Add Records"> 
        <ItemTemplate> 
         <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True" OnClick="btnadd_Click" CommandName="insert" 
         Text="Insert"></asp:LinkButton> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Delete Records"> 
        <ItemTemplate> 
         <asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="True" OnClick="btndelete_Click" CommandName="delete" 
         Text="delete"></asp:LinkButton> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="id"> 
        <ItemTemplate> 
         <asp:Label ID="lblid" runat="server" Text='<%#Bind("id") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Client Name"> 
        <ItemTemplate> 
         <asp:Label ID="lblname" runat="server" Text='<%#Bind("client_name") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Email"> 
        <ItemTemplate> 
         <asp:Label ID="lblemail" runat="server" Text='<%#Bind("email") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Google Email"> 
        <ItemTemplate> 
         <asp:Label ID="lblgemail" runat="server" Text='<%#Bind("google_email") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Contact Number"> 
        <ItemTemplate> 
         <asp:Label ID="lblcont" runat="server" Text='<%#Bind("contact_number") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField HeaderText="role"> 
        <ItemTemplate> 
         <asp:Label ID="lblrole" runat="server" Text='<%#Bind("role") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateField> 

      </Columns> 
      <EditRowStyle BackColor="#999999" /> 
      <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
      <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
      <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
      <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
      <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
     </asp:GridView> 

我有100記錄(GridView的)第一記錄被從數據庫C#中刪除

表這是我的GridView我有兩個按鈕添加和刪除(Delete(刪除)buttonClick特定記錄應該從數據庫中刪除),我點擊記錄號碼35(記錄號碼35應該被刪除),而是記錄號碼1每次都被刪除。

public void delete() 
{ 

    foreach (GridViewRow g in GridView1.Rows) 
    { 
     Label lblname = (Label)g.FindControl("lblname"); 
     Button btnde = (Button)g.FindControl("btndelete"); 
     //Response.Redirect("cs.aspx"); 
     SqlCommand cmd = new SqlCommand("delete from clientrequest where client_name='" + lblname.Text + "'", con); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     Response.Redirect("welcome.aspx"); 
     con.Close(); 
    } 
} 



protected void btndelete_Click(object sender, EventArgs e) 
{ 
    delete(); 
    GridView1.Visible = false; 

} 

這是我的CS代碼。

+0

閱讀有關參數化查詢和sql注入的信息。 –

回答

0

這是因爲在刪除你正在刪除記錄使用foreach循環這不是一個好方法。你可以試試這個:

public void delete(string Name) 
{ 
     SqlCommand cmd = new SqlCommand("delete from clientrequest where client_name='" + Name + "'", con); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     Response.Redirect("welcome.aspx"); 
     con.Close(); 
} 

和刪除按鈕點擊查找特定的行,並將其發送給刪除方法

protected void btndelete_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    GridViewRow gvr = (GridViewRow)btn.NamingContainer; 
    string name = ((Label)gvr.FindControl("lblname")).Text; 
    delete(name); 
    GridView1.Visible = false; 

} 

注意:您也可以寫按鈕單擊事件中的重定向上的基礎刪除方法返回。

0

您可以找到您的Label控件位置並獲取它們的值,然後從數據庫中刪除。它會正常工作。

public void delete() 
    { 

foreach (GridViewRow g in GridView1.Rows) 
{ 
    if(g.RowType == DataControlRowType.DataRow) 
{ 
Label lblname = (Label)g.FindControl("lblname"); 
SqlCommand cmd = new SqlCommand("delete from clientrequest where client_name='" + lblname.Text + "'", con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    Response.Redirect("welcome.aspx"); 
    con.Close(); 
    break; 
}    
} 
} 
-1

在這段代碼中你缺少這就是爲什麼它的第一行中找到默認情況下在這種情況下,你必須找到選定行索引和使用方法如下

public void delete() 
{ 
    foreach (GridViewRow g in GridView1.Rows) 
    { 
    Label lblname = (Label)g.Rows[rownumber].FindControl("lblname"); 
    Button btnde = (Button)g.Rows[rownumber].FindControl("btndelete"); 
    //Response.Redirect("cs.aspx"); 
    SqlCommand cmd = new SqlCommand("delete from clientrequest where client_name='" + lblname.Text + "'", con); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
    Response.Redirect("welcome.aspx"); 
    con.Close(); 
} 

gridview的行索引}

,並在GridView1_SelectedIndexChanged你的代碼會是這樣

static int RowNumber; 
protected void g_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) 
{ 
    RowNumber= g.SelectedIndex; 
} 

這可能對你有幫助。