我的GridView里面绑定了一个CommandField字段,我点击更新的时候 提示: Message="无法将类型为“System.Web.UI.WebControls.HyperLink”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。"
这是我绑定的更新事件代码:
protected void RowUpdating(object sender,GridViewUpdateEventArgs e)
{
string A = GridView1.DataKeys[e.RowIndex].Value.ToString();
string B = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim();
string C = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim();
DateTime D = DateTime.Now;
string E = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim();
string F = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString().Trim();
string G = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim();
string s = "update news set title='"+B+"',source='"+C + "',publictime='"+D+"',newscontent='"+E +"',picture='"+ F +"',hits='"+G +"'where newsID='"+ A+"'";
M.esql(s);
Response.Write("<script language=javascript> alert('数据更新成功!');window.location='ManagerNews.aspx'</script>");
}
麻烦各位了,我好急的!
比如说 string E = ((HyperLink)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim(); 试一下
thanks 就是这个了!
你這樣寫代碼是有問題的:
((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0]))
應該是 :TextBox a=((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])) as TextBox;
if(a!=null){
才是textbox,否則是是哦。
}
你那個錯誤,說明有的不是textbox,有的是System.Web.UI.WebControls.HyperLink
檢查儀下代碼
不懂 我就是要将GridView里面的数据更新到数据库 还请你直接教教我怎么做吧
@古镇的废墟: 這個也一下說不清楚,你可以google一下。
@無限遐想: 网上都是一律的,对我也没有作用,网上的说的GridView里面都没有HyperLink字段,所以可以转!
@古镇的废墟: GridView裏面的內容,是你自己定義的。如果你全部定義textbox ,那麼你的那個可以運行正確。
为什么要自己写代码呢?gridview本身就自带新增,编辑,删除功能啊?不设计界面3分钟就搞定了.1L已经说得很明白了,你把控件都转成Textbox去读取它的值不错,关键是你里面某一列是个HyperLink(超链接应该知道吧?),系统转不了TEXTBOX
嗯 就是提示这一列不能转换啊!那我要更新到数据库怎么办呢?自带的功能根本不好用,好多报错。还麻烦您给点意见
你UI的代码是怎样的,是用的模板列吗?如果是的,请参照下面的方法
例如:这一行的第一列的某个文本框的ID为txtTest,在更新这一行的时候获取txtTest的值的代码为
((TextBox)GridView1.Rows[e.RowIndex].FindControl("txtTest")).Text.Trim();
或者
((TextBox)GridView1.Rows[e.RowIndex].Cells[0].FindControl("txtTest")).Text.Trim();
可以不定位到单元格的,因为如果在后期,你想在这一列之前加上一列,那么你的列索引就要变了。
我不是用的模版,使用的CommandField字段,那要怎么办呢?
@古镇的废墟:
要看看你UI的代码,才知道具体是怎么回事。