我想为嵌套的Repeater设置ItemDataBound事件。
我为ItemDataBound EventHandler编写了这段代码。
if (e.Item.ItemType == ListItemType.AlternatingItem ||
e.Item.ItemType == ListItemType.Item)
{
Tour dataitem = (Tour)(e.Item.DataItem);
ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString();
}
似乎这条线正常工作
Tour dataitem = (Tour)(e.Item.DataItem);
我的问题从这里开始: 我有这个例外
Object reference not set to an instance of an object.
换行
ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString();
但问题出在这一行
ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
我需要知道为什么需要这一行。
如果我省略了这个,它可以正常工作,但没有错误。 因为它知道我的objectdatasource控件为什么需要它?
我需要对此行以及如何修复异常进行一些解释。我还没用过try catch。
我按照这篇文章编写代码:
答案 0 :(得分:1)
Tour dataitem = (Tour)(e.Item.DataItem);
以上一行应为
Tour dataitem = (Tour)(((System.Data.DataRowView)e.Item.DataItem)).Row;
您还需要检查dataitem是否为空
if(dataitem != null)
ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString();
您需要此行来获取对绑定到转发器的前端代码中使用的objectdatasource的引用,以便您可以设置Tour对象的TourId。
ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");
答案 1 :(得分:1)
为了从嵌套的Repeater的ItemDataBound事件访问“ObjectDataSource1”,ObjectDataSource需要嵌套在此Repeater中。
原因Object reference not set to an instance of an object.
是因为在调用(ObjectDataSource)e.Item.FindControl("ObjectDataSource1")
时未在此Repeater中找到“ObjectDataSource1”。