GridView代码实现编辑功能出错,求教。

lhw7791086 2012-11-19 02:51:31
点击编辑,修改完数值后点击更新,弹出错误,提示:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.TextBox”。
通过代码实现删除功能都没有问题,但是实现编辑功能就不行了(点击编辑后再点击取消不会出错),下面附上代码:
前台通过添加删除,编辑事件,后台响应事件代码。表[Save]数据有4列,分别是ID,Name,Time,Ex,ID列设为主键。

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
this.GridView2.EditIndex = e.NewEditIndex;
bind();
}

protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update [Save] set Names='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',Time='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',Ex='"
+ ((TextBox)(GridView2.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where ID='"
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";
sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
sqlcom.ExecuteNonQuery();
sqlcon.Close();
GridView1.EditIndex = -1;
bind();
}

protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView2.EditIndex = -1;
bind();
}

public void bind() //绑定函数
{
string sqlstr = "select ID as ID, Name as 姓名,Time as 时间,Ex as 事由 from [Save] where Name='" + TextBox4.Text.Trim() + "'";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, "Save");
GridView2.DataSource = myds;
GridView2.DataKeyNames = new string[] { "ID" };
GridView2.DataBind();
}
网上搜了下这种报错,有种解决办法是改为findcontrol("控件ID"),但是我这里的控件ID不存在啊,因为点击编辑后,编辑框是自带的。这种报错该怎么解决呢?
...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhw7791086 2012-11-20
  • 打赏
  • 举报
回复
问题解决了,Cells[x]中的x值出错了,改正了就行了。但是还是不明白错的原因。。。
lhw7791086 2012-11-19
  • 打赏
  • 举报
回复
引用 4 楼 riyejiancheng 的回复:
http://blog.csdn.net/21aspnet/article/details/1540301 GridView 72般绝技
我就是照着这个写的代码,出现了上面的错误。。。
lhw7791086 2012-11-19
  • 打赏
  • 举报
回复
引用 5 楼 z_dota 的回复:
C# code?1TextBox Names= GridView2.FooterRow.FindControl("TextBox1你的textboxID") as TextBox; 取值 Names.text.tostring()
关键问题是没有TEXTBOX的ID啊,我点击编辑按钮,自动弹出来的TEXTBOX的ID能获取吗?
Dotar 2012-11-19
  • 打赏
  • 举报
回复
TextBox  Names= GridView2.FooterRow.FindControl("TextBox1你的textboxID") as TextBox;
取值 Names.text.tostring()
riyejiancheng 2012-11-19
  • 打赏
  • 举报
回复
http://blog.csdn.net/21aspnet/article/details/1540301 GridView 72般绝技
lhw7791086 2012-11-19
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
仔细看看GridView2.Rows[e.RowIndex].Cells[1].Controls[0]是什么类型,可能是LiteralControl,不是TextBox
请教该如何修改呢?去掉(TextBox)后也报错,提示CS1061: “System.Web.UI.Control”不包含“Text”的定义,并且找不到可接受类型为“System.Web.UI.Control”的第一个参数的扩展方法“Text”(是否缺少 using 指令或程序集引用?)
insus 2012-11-19
  • 打赏
  • 举报
回复
bdmh 2012-11-19
  • 打赏
  • 举报
回复
仔细看看GridView2.Rows[e.RowIndex].Cells[1].Controls[0]是什么类型,可能是LiteralControl,不是TextBox

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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