protected void ButtonUpdate_Click(object sender, EventArgs e)
{
int rowIndex = ((GridViewRow)(((Button)sender).NamingContainer)).RowIndex;
string num = ((Label)(GridViewQuery.Rows[rowIndex].FindControl("Number"))).Text;
string sellprice = ((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Sell"))).Text;
string bottomline = ((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("BottomLine"))).Text;
string put = ((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Deposit"))).Text;
DataSet ds=mQueryDal.Update(conn, sellprice, bottomline, put, num);
GridViewQuery.DataSource = ds;
GridViewQuery.DataBind();
}
这就是代码了,点击修改,gridview中label变成textbox,点击更新按钮获取textbox的值,更新数据库
报错未将对象引用到设置的对象实例
还需要什么么?
出错的原因可能是在获取的控件对象为空,而后.RowIndex或者.Text时将会报错。
在代码上这样写:
string sellprice="";
TextBox txt1=((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Sell")));
if(txt1!=null)
{
sellprice=txt1.Text;
}
这样就避免了当对象为空时出错了,如果还有其它错误,就加上断点进行调试或直接输出某个值来检查
TextBox txt1=((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Sell")));
在这一句上就报错未将对象引用对设置对象的实例了
我只是给你举了个例子,你将所有转化控件对象的代码都按照上面的方式写,每一个都判断是否为空,如果为空那就是获取控件的方式不正确了
@暗夜的萤火虫: 看了你页面上的 控件 貌似没有叫 Sell 的这个控件 所以也就找不到了 你应该找 ”TextBoxSell“ 这个控件
TextBoxSell也没有啊,不过总觉得少点什么东西,FindControl("")中应该控件ID才是啊,但你的代码中似乎并没什么ID,你给第个控件指定一个ID,用FindControl("ID值")试试。。。
@白雲天: 是这样的,我写的是数据字段名,所以一直报错,谢谢你
不用客气,问题解决了就好。。。
rowIndex 能取到值?
要我不这么做~
先把Rowindex 赋到 这个button 的 commandargument 里
再者 这个应该有一个 rowEditing 事件 你的代码应该可以用到里面
rowIndex能取到值的
rowEditing事件有的,就是点击编辑后出现更新和取消按钮,button的commandargument我没有设,把rowIndex赋值进去以后呢
@暗夜的萤火虫: 你的RowIndex 取到的值就是你要操作的行么?
在RowEditing 事件里有一个参数 e 他也能取到具体的是哪一行
然后查找的话 看看这样行不行
GridViewQuery.Rows[rowIndex].Controls(N).Text;
你断点看一下 哪个控件是Text 控件 然后把N 替换成那个控件 的Index值 试试
@暗夜的萤火虫: 要不 微博上说也行~ 这样可能方便些
@天生俪姿: 我微博一直在线,可是聊天那个窗口不出来,也不知道是不是网速的原因,反正办公室网速很坑爹了,我先试试你说的那个哈
@暗夜的萤火虫: 去看看 1楼 中 说的那个rowediting 事件那块。然后想一下你现在的 button的代码。 估计你能明白 的
@暗夜的萤火虫:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
sqlcon = new SqlConnection(strCon);
string sqlstr = "update 表 set 字段1='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"
+ ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"
+ ((TextBox)(GridView1.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 GridViewQuery_RowEditing(object sender, GridViewEditEventArgs e)
{
string empno = (string)Session["Emp_no"];
DataSet ds = mQueryDal.User(conn, empno);
if (ds.Tables[0].Rows.Count == 0)
{
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "", "alert('您没有权限进行修改')", true);
}
else
{
GridViewQuery.EditIndex = e.NewEditIndex;
//编辑状态时此行变色
GridViewQuery.EditRowStyle.BackColor = System.Drawing.Color.Olive;
string m_no = TextBoxNum.Text.Trim();
string remain = TextBoxRemain.Text.Trim();
string put = TextBoxPut.Text.Trim();
string edate = TextBoxDate.Text.Trim();
DataSet dst=mQueryDal.MQuery(conn, m_no, remain, put, edate);
GridViewQuery.DataSource = dst;
GridViewQuery.DataBind();
}
@暗夜的萤火虫: TextBoxNum 这个东东 是哪来的?
没说清楚,这个界面还有几个textbox,然后根据这个有个查询按钮,在gridview中显示查询结果
你这个又是Label又是TextBox的,如果Label是查看界面的,你在编辑界面去取Label的数据显然是不行的,这个时候你需要在前台绑定TextBox的值,而不是到Label中去取
我觉得倒是要看看他这个Gridview 是什么样的
@天生俪姿: 是啊,感觉问题描述得不清楚,HTML也应该发上来