2016-03-25 9 views
0

ネストしたリピーターに対してItemDataBoundイベントを設定したいとします。ItemDataBoundおよびObjectDataSource

このコードは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"); 

です。

これを省略すると、正常に動作しますが、エラーはありません。 なぜ私のオブジェクトデータソースコントロールを知っているので、その必要はありますか?

この行についての説明と例外の修正方法が必要です。私はまだキャッチしようとしなかった。

私は、このコードは、この記事に従ってください:上記の行

https://msdn.microsoft.com/en-us/library/bb510144.aspx

+0

_ "ObjectDataSource1" _はネストされたリピータの内部にネストされているか、それとも外部にありますか?フロントエンドのリピータと_ ObjectDataSource1を投稿できますか? – zgood

+0

@zgood yesssssssss正確な問題でした。オブジェクトデータソースを入れ子にしていませんでした。今は入れ子にして正しく動作します。この質問に答えることは可能ですか?私はそれを受け入れてあなたに投票することができます。本当にありがとう。 –

+0

私は他人を助けるための回答を投稿します。 – zgood

答えて

1

(ObjectDataSource)e.Item.FindControl("ObjectDataSource1")が呼び出されたとき「ObjectDataSource1」がこのRepeaterの中に発見されなかったため

理由Object reference not set to an instance of an object.でした。

+0

本当にありがとう –

1
Tour dataitem = (Tour)(e.Item.DataItem); 

Tour dataitem = (Tour)(((System.Data.DataRowView)e.Item.DataItem)).Row; 

でなければなりません。また、あなたはデータ項目が

if(dataitem != null) 
    ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString(); 
nullであるかどうかを確認する必要があります

これは、ツアーオブジェクトのTourIdを設定できるように、リピータにバインドされたフロントエンドコードで使用されるオブジェクトデータソースへの参照を取得するために必要です。 ObjectDataSourceのがこのRepeater内にネストする必要があるだろう、ネストされたRepeaterのItemDataBoundイベントから「ObjectDataSource1」にアクセスするために

ObjectDataSource ObjectDataSource1 = (ObjectDataSource)e.Item.FindControl("ObjectDataSource1");