ItemDataBound事件中
if(e.Item.ItemType == ListItemType.Header )
{
Label Exam_Name = (Label)e.Item.FindControl("Exam_Name");
}
if(e.Item.ItemType == ListItemType.Header )
{
Label Exam_Name = (Label)e.Item.FindControl("Exam_Name");
}
t = (TextBox)MyDataGrid.Items[i].FindControl("tb"); Label l;
l = (Label)MyDataGrid.Items[i].FindControl("lb");
使用
Label TotalAll = (Label)dlOrdersList.FindControl("TotalAll");
得到 TotalAll对象,在运行时报错:未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 240:
行 241: Label TotalAll = (Label)dlOrdersList.FindControl("TotalAll");
行 242: TotalAll.Text= "100";
行 243: }
行 244:
使用
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");
Table oTab = (Table)DataGrid.Controls[0];
foreach(Control oCtrl in oTab.Rows[0].Controls)
{} //Rows[0]或Rows[1]
来找你的控件。因为DataGrid和DataList其实都是Table
protected void DataGrid1_ItemCreated(...)
{
if(e.Item.ItemType=ListItemType.Header)
c=e.Item.FindControl("id");
}如果放在ItemDataBound中做,那么回发后就找不到了。