ItemDataBound事件中
if(e.Item.ItemType == ListItemType.Header )
{
     Label Exam_Name = (Label)e.Item.FindControl("Exam_Name");
}

解决方案 »

  1.   

    TextBox t;
    t = (TextBox)MyDataGrid.Items[i].FindControl("tb"); Label l;
     l = (Label)MyDataGrid.Items[i].FindControl("lb");
      

  2.   

    我是想在Page_Load事件里得到DataGrid中定义在<HeaderTemplate>...</HeaderTemplate>中的控件对象!
      

  3.   

    Header只有在bind()过程中在会经过.Page_Load可试试在进入Bind运行时findcontrol
      

  4.   

    我在bind()之后
    使用
    Label TotalAll = (Label)dlOrdersList.FindControl("TotalAll");
    得到 TotalAll对象,在运行时报错:未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 240:
    行 241: Label TotalAll = (Label)dlOrdersList.FindControl("TotalAll");
    行 242: TotalAll.Text= "100";
    行 243: }
    行 244:
     
      

  5.   

    你可以尝试:在你绑定完了过后让页面重新刷新一次,此时利用viewstate记住一个值用来做标记,看看是否是自己控制刷新的,而后在page_load()中在采用上边各位仁兄的说法!
      

  6.   

    我在bind()之后
    使用
    Label TotalAll = (Label)dlOrdersList.FindControl("TotalAll");
    得到 TotalAll对象,在运行时报错:
    ----------------------------------------------请注意TotalAll控件是在dlOrdersList中的HeaderTemplate中的内层!比如:我在第一列的<HeaderTemplate>放置了一个:<asp:Label id="TotalAll" runat="server">Label</asp:Label>那么FindControl()应该是:
    Label TotalAll = (Label)dlOrdersList.Controls[0].Controls[0].FindControl("TotalAll");
      

  7.   

    可以这样:但必须在绑定之后:
    Table oTab = (Table)DataGrid.Controls[0];
    foreach(Control oCtrl in oTab.Rows[0].Controls)
    {} //Rows[0]或Rows[1]
    来找你的控件。因为DataGrid和DataList其实都是Table
      

  8.   

    应该是这样的:Control c;
    protected void DataGrid1_ItemCreated(...)
    {
          if(e.Item.ItemType=ListItemType.Header)
             c=e.Item.FindControl("id");
    }如果放在ItemDataBound中做,那么回发后就找不到了。