批量删除GridView行时遇“无法转换GridViewRow为GridView”错误求助
问题解决:GridView多行删除的类型转换错误
错误根源
无法将类型为“System.Web.UI.WebControls.GridViewRow”的对象强制转换为类型“System.Web.UI.WebControls.GridView”。
这个错误的核心原因是:GridView.Rows集合中的元素是GridViewRow(表格行)类型,而非GridView(整个表格)类型,你在foreach循环里错误地将循环变量声明为GridView类型,导致类型不匹配。
错误代码行:
foreach(GridView dr in GridView1.Rows)
修正后的代码
将循环变量类型改为GridViewRow,同时调整变量名让语义更清晰:
aspx.cs修正后代码
protected void Button1_Click(object sender, EventArgs e) { HtmlInputCheckBox chk; // 修正循环变量类型为GridViewRow,变量名改为row更贴合语义 foreach (GridViewRow row in GridView1.Rows) { chk = (HtmlInputCheckBox)row.FindControl("ch"); // 增加空值判断,避免空引用异常 if (chk != null && chk.Checked) { db.exenonquery("delete from tbl_employee where Employee_Id='" + chk.Value + "'"); } } db.fillgrid("Select * from tbl_employee", GridView1); }
额外提示:规避SQL注入风险
当前代码使用字符串拼接生成SQL语句,存在严重的SQL注入漏洞,建议改用参数化查询,示例如下(需适配你的db类实现):
// 替换原删除语句的写法 SqlCommand cmd = new SqlCommand("delete from tbl_employee where Employee_Id=@EmpId"); cmd.Parameters.AddWithValue("@EmpId", chk.Value); // 调用db类的参数化执行方法(需调整exenonquery支持传入SqlCommand) db.exenonquery(cmd);
内容的提问来源于stack exchange,提问作者aiswarya ms
相关产品推荐
相关产品推荐

