读书人

运行后报错可就是查不出原因。(一G

发布时间: 2012-03-24 14:00:46 作者: rapoo

运行后报错,可就是查不出原因。(一Gridview问题)问题解决立刻结帖。
我想在用Gridview绑定数据后进行更新和删除操作,在编码实现Updating事件时报错。相关信息如下,烦请各位大虾帮忙看看。谢谢!!!


//更新
protected void GridView3_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string sqlupdate = "update TABLE4 SET t002=@t002 where t001=@t001 ";
SqlConnection conn = new SqlConnection(SqlconString.SqlconnectionString);
SqlCommand cmd = new SqlCommand(sqlupdate, conn);
cmd.Parameters.Add( "@t001 ", SqlDbType.VarChar, 4);
cmd.Parameters.Add( "@t002 ", SqlDbType.VarChar, 100);
cmd.Parameters[ "@t001 "].Value =GridView3.DataKeys[e.RowIndex][ "t001 "].ToString();
cmd.Parameters[ "@t002 "].Value = ((TextBox)(GridView3.Rows[e.RowIndex].Cells[2].Controls [0])).Text.ToString();
conn.Open();
cmd.ExecuteNonQuery();
GridView3.EditIndex = -1;
conn.Close();
BindData();

}


报错信息如下:
用户代码未处理InvalidCastException

unable to cast object of type 'system.web.UI.webcontrols.datacontrollinkbutton ' to type 'system.web.UI.webcontrols.textbox '.
排错提示:
当从一个数字执行强制转换时,值必须是一个小于无限大的数字。确保源类型可以转换为目标类型。


在线等,如果大家还有什么不清楚的,可以在线提问,菜鸟在这里谢谢各位大虾了。

[解决办法]
cmd.Parameters[ "@t002 "].Value = ((TextBox)(GridView3.Rows[e.RowIndex].Cells[2].Controls [0])).Text.ToString();

这句错了。。你把它转换为 TextBox 何意?难道你的sql 参数是一个TextBox 控件 = =!
[解决办法]
改成如下看行不?
cmd.Parameters[ "@t002 "].Value = ((TextBox)(GridView3.Rows[e.RowIndex].Cells[2].Controls [0])).Text;

[解决办法]
GridView3.Rows[e.RowIndex].Cells[2].FindControl( "控件ID "),这样写才正确
[解决办法]
'system.web.UI.webcontrols.datacontrollinkbutton ' to type 'system.web.UI.webcontrols.textbox '.

明型,linkbutton ...textbox...看看是否Cells[2]找了
[解决办法]
type 'system.web.UI.webcontrols.datacontrollinkbutton ' to type 'system.web.UI.webcontrols.textbox '

这个是说你找到的那个控件是datacontrollinkbutton类型,不能转为textbox的
楼主看一下是不是找错位置了
[解决办法]
cmd.Parameters[ "@t002 "].Value = ((TextBox)(GridView3.Rows[e.RowIndex].Cells[2].Controls [0])).Text.ToString();


有错误啊
你的参数值怎么会是text类型的呢
改成
cmd.Parameters[ "@t002 "].Value = (GridView3.Rows[e.RowIndex].Cells[2].Controls [0])).Text.ToString();

[解决办法]
cmd.Parameters[ "@t002 "].Value =((TextBox)GridView3.Rows[e.RowIndex].FindControl( "控件ID ")).Text
[解决办法]
先确认你那个控件到底是什么?
其实最好用Findcontorl
[解决办法]
如果想不报错可以这样写,不过这样会隐藏逻辑错误

TextBox txt = GridView3.Rows[e.RowIndex].Cells[2].Controls[0] as TextBox;
cmd.Parameters[ "@t002 "].Value = (txt == null ? (object)(System.DBNull.Value) : (object)(txt.Text));
[解决办法]
最好使用Findcontorl 避免定位的错误
[解决办法]
最好使用Findcontorl 避免定位的错误
-------------------------
如果使用默认的LinkButton之类的控件是无法预先知道其ID的。


TextBox txtDome = GridView3.Rows[e.RowIndex].Cells[2].Controls [0];
---------------------------------
这段代码是你试过还是仅仅是你想出来的?

读书人网 >asp.net

热点推荐