ASP.NET中GridView 模板删除列CheckBox 实现删除多条数据

上周五的课上,要求的做一个使用GridView来提取数据,并做一个删除列,来删除数据。

作业中提示了一段代码,要获取当前勾选的 CheckBos 所在行的ID数值

foreach (GridViewRow gr in GridView1.Rows)
{
Control ctrl = gr.Cells[4].FindControl("CheckBox1"); //寻找第四列的控件CheckBox1
if (ctrl != null)
{
CheckBox cb = (CheckBox)ctrl;

if (cb.Checked == true) //循环查找有哪些行被勾选
{
string autoInc = gr.Cells[0].Text; //返回被勾选的值
}
}
}

如果在 if (cb.Checked == true) 的条件句内部直接写入 删除记录的sql语句,如 DELETE FROM [TABLE] WHERE ID=autoinc 的话,一次只能删除一条数据。 原因是ASP.NET中每次执行数据操作后都要刷新页面来获取执行操作后的结果。
因此造成了 跳出循环体 导致后续的删除无法完成。

那么解决方法就是 不用循环 来做数据删除的工作。 而采用 一条sql语句来删除多条数据。
删除多条数据的sql语句为 DELETE FROM [TABLE] WHERE ID IN(1,2,3,4,5);

接下来的工作就是构建一个字符串,这个字符串的内容就是为被选择的行的ID号的集合。即 String s=”1,2,3,4,5″;

在string autoInc = gr.Cells[0].Text;后跟上 String Delete+=autoInc+”,”;

假设我选了1-5的ID号数据,循环结束后,Delete的数值为 1,2,3,4,5, 。 显然 5 后面的逗号为多余的。

接着使用截取字符串的方法来去掉最后的逗号。 string s= delete.Substring(0, delete.Length – 1);//从字符串开头截取到字符串的倒数第二位。 这样字符串的内容就为 1,2,3,4,5 最后的逗号被截取掉了。

最后就可以通过 string com = “DELETE FROM [TABLE] WHERE [ID] IN(“+s+”)”; 来删除多条记录了。

最终的代码样子为:


string delete="";
foreach (GridViewRow gr in GridView1.Rows)
{
Control ctrl = gr.Cells[4].FindControl("CheckBox1");
if (ctrl != null)
{
CheckBox cb = (CheckBox)ctrl;

if (cb.Checked == true)
{
string autoInc = gr.Cells[0].Text;
delete += autoInc + ",";
}
}
}
string s= delete.Substring(0, delete.Length - 1);
string com = "DELETE FROM [train] WHERE [AutoID] in("+s+")";
SqlConnection conn = new SqlConnection(con);
conn.Open();
SqlCommand comm = new SqlCommand(com, conn);
try
{
comm.ExecuteNonQuery();
}
catch (Exception ex)
{
Response.Write("");
}
finally
{
conn.Close();
Response.Write("");
Response.Redirect("Modify.aspx?ID=" + myID + "");
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注