使用(复选框和删除按钮)从GridView和DB中删除记录

本文关键字:删除 GridView DB 记录 按钮 复选框 使用 | 更新日期: 2023-09-27 18:25:03

我有一个GridView1声明为:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" GridLines="None" DataKeyNames="Case_ID">
  <Columns>
      <asp:TemplateField>
           <ItemTemplate><asp:CheckBox ID="cb" runat="server" /></ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField  HeaderText="No.">
           <ItemTemplate><%# Container.DataItemIndex + 1 %></ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField  HeaderText="Case Title"  DataField="caseTitle"/>
      <asp:BoundField  HeaderText="Age" DataField="age" />
      <asp:BoundField  HeaderText="Gender"  DataField="gender"/>
      <asp:BoundField  HeaderText="Treated By" DataField="owner"/>
      <asp:BoundField  HeaderText="Added Date"  DataField="sDate"/>
      <asp:BoundField  HeaderText=""  DataField="Case_ID" Visible="false"/>
  </Columns>
</asp:GridView>

这是我用作数据源的DataTable

DataTable aTable = new DataTable();
aTable.Columns.Add("caseTitle", typeof(string));
aTable.Columns.Add("age", typeof(string));
aTable.Columns.Add("gender", typeof(string));
aTable.Columns.Add("owner", typeof(string));
aTable.Columns.Add("sDate", typeof(string));
aTable.Columns.Add("Case_ID", typeof(int));
I want to use Case_ID as an index for the GridView, so I can delete a record from database when I check its check box in the GridView.

这是一个场景:

GridView显示数据库中的案例信息用户可以选中复选框,然后单击[删除]按钮,此操作将从数据库中删除记录;

当我在[删除]按钮中执行此代码时:

foreach (GridViewRow row in GridView1.Rows)
{
    CheckBox c = (CheckBox)row.FindControl("cb");
    if (c.Checked)
    {
        int rowIndex = GridView1.SelectedIndex;
        string id = GridView1.DataKeys[rowIndex].Value.ToString();
        ds.DeleteCommand = " delete from Cases where Case_ID=" + id + "";
        ds.Delete();
    } 
}

我发现,即使在检查某些记录时,c也总是为空;所以问题是它没有检测到复选框中的更改,我该怎么做才能检测到它?

使用(复选框和删除按钮)从GridView和DB中删除记录

删除按钮在哪里。。。尝试使用删除按钮的"argument"属性来查找合适的复选框按钮。我通常将要删除的行的ID作为按钮的参数属性值。这就是为什么我从不需要搜索复选框。。。(在客户端,我使用复选框的客户端单击事件来更新删除按钮的参数属性)。

关于安全性的另一个词是:使用存储过程来避免安全问题(永远不要把delete语句或任何SQL语句放在C#中硬编码…)

编辑:

同时检查:

     GridViewRow.RowType==RowType.DataRow 

您得到null是因为当前行可能是标题行或类似的行,而复选框不是此类行的一部分。