首页 新闻 会员 周边 捐助

获取gridview里面的lable值

0
悬赏园豆:40 [已解决问题] 解决于 2012-04-20 16:34

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的值,更新数据库

报错未将对象引用到设置的对象实例

还需要什么么?

暗夜的萤火虫的主页 暗夜的萤火虫 | 初学一级 | 园豆:8
提问于:2012-04-20 14:10
< >
分享
最佳答案
0

出错的原因可能是在获取的控件对象为空,而后.RowIndex或者.Text时将会报错。

在代码上这样写:

string sellprice="";

TextBox txt1=((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Sell")));

if(txt1!=null)

{

    sellprice=txt1.Text;

}

这样就避免了当对象为空时出错了,如果还有其它错误,就加上断点进行调试或直接输出某个值来检查

收获园豆:40
KivenRo | 小虾三级 |园豆:1734 | 2012-04-20 15:30

TextBox txt1=((TextBox)(GridViewQuery.Rows[rowIndex].FindControl("Sell")));

在这一句上就报错未将对象引用对设置对象的实例了

暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 15:33

我只是给你举了个例子,你将所有转化控件对象的代码都按照上面的方式写,每一个都判断是否为空,如果为空那就是获取控件的方式不正确了

KivenRo | 园豆:1734 (小虾三级) | 2012-04-20 15:40

@暗夜的萤火虫: 看了你页面上的 控件  貌似没有叫  Sell 的这个控件  所以也就找不到了 你应该找 ”TextBoxSell“ 这个控件 

 

二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 15:43

TextBoxSell也没有啊,不过总觉得少点什么东西,FindControl("")中应该控件ID才是啊,但你的代码中似乎并没什么ID,你给第个控件指定一个ID,用FindControl("ID值")试试。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-04-20 15:50

@白雲天: 是这样的,我写的是数据字段名,所以一直报错,谢谢你

暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 16:33

不用客气,问题解决了就好。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-04-20 16:41
其他回答(3)
0
励箭 | 园豆:47 (初学一级) | 2012-04-20 14:20

很强大,但是没有我要的具体答案,还是谢谢你啦

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 14:31
0

rowIndex 能取到值?

要我不这么做~  

先把Rowindex  赋到 这个button 的 commandargument 里

再者 这个应该有一个 rowEditing 事件 你的代码应该可以用到里面 

二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 14:26

rowIndex能取到值的

rowEditing事件有的,就是点击编辑后出现更新和取消按钮,button的commandargument我没有设,把rowIndex赋值进去以后呢

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 14:38

@暗夜的萤火虫: 你的RowIndex 取到的值就是你要操作的行么?

在RowEditing  事件里有一个参数 e 他也能取到具体的是哪一行

然后查找的话 看看这样行不行

GridViewQuery.Rows[rowIndex].Controls(N).Text;

你断点看一下 哪个控件是Text 控件 然后把N 替换成那个控件 的Index值 试试 

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 14:53

@暗夜的萤火虫: 要不 微博上说也行~   这样可能方便些 

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 14:54

@天生俪姿: 我微博一直在线,可是聊天那个窗口不出来,也不知道是不是网速的原因,反正办公室网速很坑爹了,我先试试你说的那个哈

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 15:05

@暗夜的萤火虫: 去看看 1楼 中 说的那个rowediting 事件那块。然后想一下你现在的 button的代码。 估计你能明白 的

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 15:12

@暗夜的萤火虫: 

  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();
    }

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 15:14

@天生俪姿: 编辑那块的代码

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();

        }
      

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 15:22

@暗夜的萤火虫: TextBoxNum 这个东东 是哪来的? 

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 15:28

没说清楚,这个界面还有几个textbox,然后根据这个有个查询按钮,在gridview中显示查询结果

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-04-20 15:36
0

你这个又是Label又是TextBox的,如果Label是查看界面的,你在编辑界面去取Label的数据显然是不行的,这个时候你需要在前台绑定TextBox的值,而不是到Label中去取

我觉得倒是要看看他这个Gridview 是什么样的 

支持(0) 反对(0) 二十二号同学 | 园豆:790 (小虾三级) | 2012-04-20 15:09

@天生俪姿: 是啊,感觉问题描述得不清楚,HTML也应该发上来

清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册