我用后台代码在DataGrid控件的页脚列里,加入了一个CheckBox服务端对象,但提交的时候,我用如下语句求取,出错,提示"未将对象引用设置到对象的实例"
CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
this.Label1.Text = bolEdit.Checked.ToString();请问该如何求取?

解决方案 »

  1.   

    是不是你加CheckBox服务器对象时没有给它加Runat=server这个属性?
      

  2.   

    if(e.Item.ItemType==ListItemType.Foot)
      

  3.   

    在DataGrid的DataBound裡加入:
    if(e.Item.ItemType==ListItemType.Foot)
    {
    CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
    this.Label1.Text = bolEdit.Checked.ToString();
    }
      

  4.   

    for(int i=0;i<DataGridName.Items.Count;i++)
    {
       CheckBox CheckBoxSelect=(CheckBox)DataGridName.Item[i].FindContrl("CheckBoxName");
       if(CheckBoxSelect.Checked)//选取选中的checkbox
       {
         ...
       }
       ...
    }
      

  5.   

    你可以用变量代替label实现同样的效果
      

  6.   

    to fancyboyxh(ffffbbbbyyy) 
    你的方法不能用。
    以这种方式,只能求取到DATAGRID所生成的普通项及交替项,无法求取页眉及页脚
      

  7.   

    我已经成功加入该服务器端控件了,现在的问题是在页面提交的时候,要取该控件的值啊.可你们都在回答如何放入该控件.
    比如说在页面放一个提交按钮,之后在该提交按钮的事件里,求取上述控件的值.
    ---------------------------------------
    遍历datagriditem:
    foreach (DataGridItem e in datagrid1.Items)
    {
    if(e.Item.ItemType==ListItemType.Foot)
    {
    CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
    string result = bolEdit.Value;//?
    }
    }
      

  8.   

    to AllenTing(It's time to 闭关修炼ing!!) 这个方法也不行,也只能求取到普通项及交替项.
      

  9.   

    这个跟加断点没有关系.总的来说,就是无法从服务端取得DATAGRID页眉部分控件的值.
    各种方法都试过了,当然,在ItemDataBound事件里面是可以得到,但要对控件做操作的时候,往往是在某个提交按钮事件里面,恰恰是在这里卡壳了.
    请各位一起探讨吧
      

  10.   

    foreach(Control c in DataGrid1)
    {
        if(C.ID = "你控件的ID")
        {
        }
    }
      

  11.   

    Private Sub DataGrid1_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemCreated
            If e.Item.ItemType = ListItemType.Footer Then
                Dim lbl As Label = CType(e.Item.FindControl("Label2"), Label)
                lbl.Text = Now
            End If
        End Sub
      

  12.   

    Dim item As DataGridItem        For Each item In Me.DataGrid1.Controls(0).Controls            If item.ItemType = ListItemType.Footer Then
                    Dim ddl As Label = CType(item.FindControl("label2"), Label)                Me.Response.Write(ddl.Text)
                End If
            Next这个试
      

  13.   

    to noyester(继续是菜鸟)
    你的最后一个方法思路是对的(但所有其他方法都是错的).我受到你的启发,写如下程序正确求取出值.
    int mycount = this.DataGrid1.Controls[0].Controls.Count;
    for(int i=0;i<mycount;i++)
    {
    DataGridItem myitem = (DataGridItem)this.DataGrid1.Controls[0].Controls[i];
    TextBox mybox = new TextBox();
    mybox = (TextBox)myitem.FindControl("TextBox1");
    if(mybox != null)
    {
    this.MyScript(i.ToString() + "=" + mybox.Text + " 总行数:" + mycount.ToString());
    }
    }
    以上原理,推测应是如下:
    datagrid控件在生成之后,作为父控件,在其下拥有直属的一个子控件,而在此子控件之下,又拥有8个孙控件,此8个孙控件,包括通常的页眉/普通项/交替项/页脚等.求取页脚内的控件,自然是最后一个孙控件,所以求取的方法可简要归纳为如下:int mycount = this.DataGrid1.Controls[0].Controls.Count;
    TextBox mybox = (TextBox)this.DataGrid1.Controls[0].Controls[mycount-1].FindControl("TextBox1");
    this.MyScript(mybox.Text);
    谢谢.
    此贴暂放几天,以供各位同仁参考.几天后结贴.主要得分应是 noyester(继续是菜鸟)
      

  14.   

    另外,如下方式遍历datagriditem:
    foreach (DataGridItem e in datagrid1.Items)
    {
    if(e.Item.ItemType==ListItemType.Foot)
    {
    CheckBox bolEdit = (CheckBox)this.DataGrid1.FindControl("bolEdit");
    string result = bolEdit.Value;//?
    }
    }
    求取的行控件,总数只有6个,可能是少了页眉与页脚.所以无法正确求取到值