使用(复选框和删除按钮)从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也总是为空;所以问题是它没有检测到复选框中的更改,我该怎么做才能检测到它?
删除按钮在哪里。。。尝试使用删除按钮的"argument"属性来查找合适的复选框按钮。我通常将要删除的行的ID作为按钮的参数属性值。这就是为什么我从不需要搜索复选框。。。(在客户端,我使用复选框的客户端单击事件来更新删除按钮的参数属性)。
关于安全性的另一个词是:使用存储过程来避免安全问题(永远不要把delete语句或任何SQL语句放在C#中硬编码…)
编辑:
同时检查:
GridViewRow.RowType==RowType.DataRow
您得到null是因为当前行可能是标题行或类似的行,而复选框不是此类行的一部分。