ASP.NET GridView用代码实现编辑功能出错。
点击编辑,修改完数值后点击更新,弹出错误,提示:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI....
点击编辑,修改完数值后点击更新,弹出错误,提示:无法将类型为“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不存在啊,因为点击编辑后,编辑框是自带的。这种报错该怎么解决呢? 展开
通过代码实现删除功能都没有问题,但是实现编辑功能就不行了(点击编辑后再点击取消不会出错),下面附上代码:
前台通过添加删除,编辑事件,后台响应事件代码。表[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不存在啊,因为点击编辑后,编辑框是自带的。这种报错该怎么解决呢? 展开
2个回答
展开全部
解决方法有两种:
1.你调试一下GridView2_RowUpdating中的GridView2.Rows[e.RowIndex].Cells[x].Controls[0]的实际值为多少,根据实际情况,对应到你的sql语句中。x为0,1,2,3。
2.用repeater,datalist的替换gridview,然后,通过在相应的列中添加button按钮做为删除、更新等用户接口。用command事件处理实际的删除、更新等操作。
ps:不建议经常使用gridview这种控件,不利于你了解实际代码的运行过程。
1.你调试一下GridView2_RowUpdating中的GridView2.Rows[e.RowIndex].Cells[x].Controls[0]的实际值为多少,根据实际情况,对应到你的sql语句中。x为0,1,2,3。
2.用repeater,datalist的替换gridview,然后,通过在相应的列中添加button按钮做为删除、更新等用户接口。用command事件处理实际的删除、更新等操作。
ps:不建议经常使用gridview这种控件,不利于你了解实际代码的运行过程。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询