2016-03-25 18 views
0

İç içe geçmiş bir Tekrarlayıcı için bir ItemDataBound olayı ayarlamak istiyorum.ItemDataBound and ObjectDataSource

Bu kodu ItemDataBound EventHandler için yazarım.

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(); 
} 

hat

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

düzgün çalıştığını görünüyor ve sorunum burada başlıyor: Bu istisna var hat için

Object reference not set to an instance of an object.

ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString(); 

ama sorun ben bu satır tabi nedenini bilmek istiyorum

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

bu çizgidedir.

Eğer bunu çıkarırsam henüz düzgün çalışmayabilir ama hata yok. , nesne veri kaynağı denetimimin neden gerekli olduğunu biliyor mu?

Bu satır hakkında bazı açıklamalara ve özel durumun nasıl düzeltileceğine ihtiyacım var. Henüz kullanmadım.

Ben bu kod Bu makaleyi izleyin:

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

+0

_ "ObjectDataSource1" _ iç içe geçmiş tekrarlayıcınızın içine yerleştirilmiş mi, yoksa dışarıda mı? Ön uç tekrarlayıcı ve _ "ObjectDataSource1" _ kodu – zgood

+0

@zgood yesssssssss gönderebilir miyim, ben nesneyi nestdatasource koymak değildi. şimdi iç içe geçirdim ve doğru çalışıyor. Bu soruya cevap vermek mümkün mü, sonra bunu kabul edebilir ve sizin için oy verebilirim. Gerçekten teşekkür ederim. –

+0

Tamam Diğerlerine yardım etmek için bir cevap göndereceğim. – zgood

cevap

1

. (ObjectDataSource)e.Item.FindControl("ObjectDataSource1") çağrıldığında "ObjectDataSource1" bu Tekrarlayıcı iç bulunamadığı için

nedeni Object reference not set to an instance of an object. oldu.

+0

gerçekten çok teşekkür ederim –

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

Yukarıdaki satır

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

Ayrıca DataItem boş olup olmadığını kontrol etmeniz gerekir olmalıdır

if(dataitem != null) 
    ObjectDataSource1.SelectParameters["Id"].DefaultValue = dataitem.TourId.ToString(); 

Ayrıca, Tour nesnesinin TourId değerini ayarlayabilmeniz için, tekrarlayıcıya bağlı ön uç kodunda kullanılan nesne veri kaynağınıza bir başvuru almak için bu satıra ihtiyacınız vardır. ObjectDataSource bu Tekrarlayıcı iç içe olması gerekir olurdu iç içe Tekrarlayıcı ItemDataBound olaydan "ObjectDataSource1" erişmek için

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