麻烦高手帮我看看这段代码,总是报错

joy_133 2010-11-01 09:59:53
我想把GRIDVIEW中自定义模板中textbox中填写的文本更新到数据库表中,但总是提示“无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。”

这句代码报错,麻烦高手赐教一下,谢谢!
Mydb.ExcuteUpdateQuery("update tb_defen set id = '" + Session["id"].ToString() + "',defen1 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[1].Controls[0])).Text + "',defen2 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[2].Controls[0])).Text + "',defen3 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[3].Controls[0])).Text + "',defen4 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[4].Controls[0])).Text + "',defen5 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[1].Controls[0])).Text + "' where name = '" + (GridView1.Rows[i].Cells[0].Controls[0]).ToString() + "");
...全文
88 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿旭 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 joy_133 的回复:]

引用 3 楼 linux7985 的回复:
上面有一个单元格的控件不是TextBox而是Literal控件,楼主好好找找

不好意思,我是新手了,刚刚学做这个,不是太明白你说的?
[/Quote]

就是里边有个控件不是TextBox或者其子类,而你硬是把它转成TextBox,就会出错。
边城的刀声 2010-11-01
  • 打赏
  • 举报
回复
同时,如果你的页面关掉了了ValidationReuqest的话,那么在入库前最好把数据HtmlEncode下
边城的刀声 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hztltgg 的回复:]

我觉得用GRIDVIEW控件却不用数据源控件,还去自己拼接SQL,这实在太那个什么了。
[/Quote]
他意思是让你用sql parameter来实现 .
SqlCommand cmd = new SqlCommaand();
cmd.Parameters.Add(@"defen1",SqlDbType.类型,长度)
cmd.Parameters["@defen1"].Value = @(TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text;
这样可以防止SQL注入
边城的刀声 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 joy_133 的回复:]

引用 2 楼 bclz_vs 的回复:
或者是((TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text,改下索引

我改成control[1]调试时却显示“指定的参数已超出有效值的范围。
参数名: index”。
[/Quote]
这是另外一个问题了,说明是你的Rows出问题了,加个RowType类型的判断,只有是DataRow才执行这个

if(GridView1.Rows[i].RowType != DataControlRowType.DataRow) return;
Mydb.ExcuteUpdateQuery("update tb_defen set id = '" + Session["id"].ToString() + "',defen1 = '"
+ ((TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text + "',defen2 = '"

joy_133 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 linux7985 的回复:]
上面有一个单元格的控件不是TextBox而是Literal控件,楼主好好找找
[/Quote]
不好意思,我是新手了,刚刚学做这个,不是太明白你说的?
hztltgg 2010-11-01
  • 打赏
  • 举报
回复
我觉得用GRIDVIEW控件却不用数据源控件,还去自己拼接SQL,这实在太那个什么了。
hch126163 2010-11-01
  • 打赏
  • 举报
回复
System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox

这个错误说明还不够明确吗?
很明显你有一个控件是LiteralControl !你非把它转成TextBox!

自己仔细看看代码,看看是哪个单元格的不是TextBox!!!
或者自己调试一下
joy_133 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bclz_vs 的回复:]
或者是((TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text,改下索引
[/Quote]
我改成control[1]调试时却显示“指定的参数已超出有效值的范围。
参数名: index”。
机器人 2010-11-01
  • 打赏
  • 举报
回复
说明 Controls[0] 不是TextBox,换个Index看看。
Teng_s2000 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bclz_vs 的回复:]
或者是((TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text,改下索引
[/Quote]
+1
烈火蜓蜻 2010-11-01
  • 打赏
  • 举报
回复
上面有一个单元格的控件不是TextBox而是Literal控件,楼主好好找找
边城的刀声 2010-11-01
  • 打赏
  • 举报
回复
或者是((TextBox)(GridView1.Rows[i].Cells[1].Controls[1])).Text,改下索引
边城的刀声 2010-11-01
  • 打赏
  • 举报
回复
FindControl()

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧