2016-08-01 87 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; 
} 

这可能对你有帮助。