2012-11-07 17 views
5

DB'den aldığım verileri saklamak için kullandığım birkaç özel sınıf (NTDropDown ve NTBaseFreight) oluşturdum. NTBaseFreight Listesini ve NTDropDown için 2 listeyi başlatıyorum.list.add, orijinal nesneye bir başvuru ekliyor gibi görünüyor?

başarıyla Navlunlar listesine navlunlar eklemek için List.Add kullanabilirsiniz, ancak ben kod hata ayıklama, benim 2 açılır listeleri hep NTDropDown aynı değerleri (I varsayarak bu bir referans olduğunu olan sadece 1 NTDropDown içerirler sorun, ama ne yapıyorum yanlış?) Taşıyıcı ve carrier_label"001", "MyTruckingCompany" ve ben frt_carriers için eğer ekstresinde bir mola koyarsanız

, ikinci satırda, Bir örnek vermek gerekirse, frt_carriers ve frt_modes hem değerlerle "001", "MyTruckingCompany" ile, onların listesinde sadece 1 öğeyi içerecektir ... NTDropDown’da aynı değerler.

Kodu:

List<NTDropDown> frt_carriers = new List<NTDropDown>(); 
List<NTDropDown> frt_modes = new List<NTDropDown>(); 
List<NTBaseFreight> freights = new List<NTBaseFreight>(); 
NTDropDown tempDropDown = new NTDropDown(); 
NTBaseFreight tempFreight = new NTBaseFreight(); 

//....Code to grab data from the DB...removed 

while (myReader.Read()) 
{ 
    tempFreight = readBaseFreight((IDataRecord)myReader); 

    //check if the carrier and mode are in the dropdown list (add them if not) 
    tempDropDown.value = tempFreight.carrier; 
    tempDropDown.label = tempFreight.carrier_label; 
    if (!frt_carriers.Contains(tempDropDown)) frt_carriers.Add(tempDropDown); 

    tempDropDown.value = tempFreight.mode; 
    tempDropDown.label = tempFreight.mode_label; 
    if (!frt_modes.Contains(tempDropDown)) frt_modes.Add(tempDropDown); 

    //Add the freight to the list 
    freights.Add(tempFreight); 
} 
+2

tamam, bunu çözdüm ... Her seferinde yeni bir NTDropDown başlatmalıyım (tempDropDown'ı tekrar tekrar kullanmayın). Yani, her zaman kullanmadan önce tempDropDown = new NTDropDrop(); Bu soruyu silmeli miyim? –

+0

Hayır. Soruyu açık bırakın. Kendi sorunuzu çözmek herkes için hala yararlıdır. – hometoast

cevap

9

Evet, başvuru türlerinin bir listesi aslında yalnızca bir başvuru listesidir.

Listede saklamak istediğiniz her nesne için yeni bir örnek oluşturmanız gerekir.

Ayrıca, Contains yöntemi başvuruları karşılaştırır, dolayısıyla aynı verileri içeren iki nesne eşit kabul edilmez. Listedeki nesnelerin özelliklerinde bir değer arayın.

if (!frt_carriers.Any(c => c.label == tempFreight.carrier_label)) { 
    NTDropDown tempDropDown = new NTDropDown { 
    value = tempFreight.carrier, 
    label = tempFreight.carrier_label 
    }; 
    frt_carriers.Add(tempDropDown); 
} 
4

tempDropDown bütün döngü boyunca aynı nesnedir. Birden fazla eklemek isterseniz yeni bir örnek oluşturmalısınız.

Tam olarak listenizdeki tempDropDown'ı eklemeyle ne yapmaya çalıştığınızı anlamaya çalışmakta zorlanıyorum.

+0

Yea, yükler nesnemle ilgili bir soruna neden olmadığından kafam karışmıştı, ama bunun sebebi her defasında yeni bir nesnenin readBaseFreight işlevinden yeni bir nesne aldığım için ... –

+0

dürüst olmak gerekirse, benim fikrim değildi .. navlunların listesi JSON'da iade edilir (bir uygulama tarafından kullanılacaktır) ve her bir operatör/mod için olası tüm değerlerin ayrı bir listesini oluşturması söylendi, böylece kullanıcı sonuçları daha fazla filtreleyebilir (eğer isterlerse) ... bana göre, benzersiz değerler listesinin uygulama tarafından yaratılmasının mantıklı olurdu ... Sadece navlun listesini vermeliyim ... ama ... evet ... –

İlgili konular