定义了一列
<asp:BoundField DataField="OrgId" HeaderText="OrgId" Visible="true"></asp:BoundField>
从数据库取出的值放入到了里面、现在更新以后我想取出这一列的每一行的值
代码如下        DataTable dt = new DataTable("list");
        dt.Columns.Add("TrmId", System.Type.GetType("System.String"));
        for (int i = 0; i < this.GridView1.Rows.Count; i++)
        {
            DataRow dr = dt.NewRow();
            HiddenField state = GridView1.Rows[i].FindControl("OrgId") as HiddenField;
            dr["TrmId"] = state.Value.ToString();        }但是
 dr["TrmId"] = state.Value.ToString();
报错,未将对象引用设置到对象的实例。
我个人推断可能跟绑定DataField="OrgId" 有关系。
求高手帮忙。

解决方案 »

  1.   

    这样肯定不行了!!!
    么有HiddenField啊,它在你的页面中不是hidden
      

  2.   

    小弟不才,以前做的都是winform,asp的不太懂。
    希望大家帮忙。
    HiddenField这个东西还是我在网上看到的,不太会用。谢谢帮忙提醒!~~~~~
      

  3.   

                string state = DataBinder.Eval(e.Row.DataItem,"OrgId")
                dr["TrmId"] = state.ToString();
      

  4.   


    foreach(GridViewRow gr  in GridView1.Rows)
    {
     HiddenField state = gr.FindControl("OrgId") as HiddenField;
    if(state !=null)
              dr["TrmId"] = state.Value.ToString();
    }
      

  5.   

    gridview的模板列中是否使用了HiddenField
      

  6.   

    如果这里不是gridview的databind事件
    那么在databind事件中获得这个值,然后赋予一个全局变量
    用到时调用即可。
      

  7.   

    BoundField 
    不能用FindControl 查找的
      

  8.   

    恩。我估计也是这个原因。谢谢大家,我学到了不少东西。asp我还是个菜鸟。
      

  9.   

    你的控件不是这个,换成Lable!
     Lable state = GridView1.Rows[i].FindControl("OrgId") as Lable;
      

  10.   

    你说下 你的需求因为回发后 gridview 是 没有值的 和winform 是不一样的
      

  11.   

    <asp:TemplateField HeaderText="">
    <ItemTemplate> <asp:HiddenField ID="Hd_NewsId" Value='<%#Eval("NewsId")%>' runat="server" />
    </ItemTemplate>
    </asp:TemplateField>
      

  12.   

            for (int i = 0; i < this.GridView1.Rows.Count; i++)
            {
                DataRow dr = dt.NewRow();
                HiddenField state = GridView1.Rows[i].cells[你的列号].Text;
                dr["TrmId"] = state.Value.ToString();        }
    GridView1.Rows[i].cells[你的列号].Text 这已经取出你的值,
    你下面在做什么dr["TrmId"] = state.Value.ToString()你描述清楚点
      

  13.   

    搞错了,如果不是模板列,而要取第一列的值的话,这样:GridView1.Rows[i].cells[0].Text
      

  14.   

    大家都基本说同一个问题了
    就是没有控件放在templatefield里的话,你不可能找到它
    那么一个: 用DataBinder方法找到它赋给一个值,引用它
    再个: 就是添加templatefield中添加一个控件,然后findcontrol
      

  15.   

    用这个HiddenField是干嘛   用个label不好吗?
    Lable state = GridView1.Rows[i].FindControl("OrgId") as Lable; 另外你是要把数据显示在HiddenField上面
     dr["TrmId"] = state.Value.ToString();这样写的意思是?
    还是state.Value=dr["TrmId"].ToString();
      

  16.   

    对没对  就不知道了,基本不用控件,偶尔用用repeater
      

  17.   

    总结下。方法都试过了。都不好用。
    这个答案是对的BoundField 
    不能用FindControl 查找的 
      

  18.   

    把这句<asp:BoundField DataField="OrgId" HeaderText="OrgId" Visible="true"></asp:BoundField>
    换成
    <asp:TemplateField HeaderText="OrgId">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%#Eval("OrgId") %>'></asp:Label>
            </ItemTemplate>
            </asp:TemplateField>
    HiddenField state = GridView1.Rows[i].FindControl("Label1") as HiddenField;
      

  19.   

    现在有两个办法  一是通过 BoundField  对应的列号 取的相应的内容二是  将绑定的数据 进行 类型转换  ,然后根据"key"获取内容
      

  20.   

    谢谢大家了。
    我学到了很多东西,都记下来了。
    特感谢capay,成功取到了值。思路比较好,换成了lable  不用BoundField 了。
    谢谢   再次感谢。以后我还会跟大家联系的。