2016-03-27 4 views
1

Yani bir sonraki yükleme ve hizmetler önce hizmetleri içeren iki liste görünümleri, karşılaştırmak çalışıyorum - ÖyleC# yeni liste görünümü içine iki listviews ve çıktı karşılaştırmak için çalışılıyor

serviceinfo si = new serviceinfo(); 
     for (int i = 0; i < listView2.Items.Count; i++) 
     { 
      string testing = listView1.Items[i].Text; 
      //MessageBox.Show(testing); 
      ListViewItem item = listView2.FindItemWithText(testing); 
      //MessageBox.Show(item.ToString()); 
      if (item == null) 
      { 
       //MessageBox.Show("Test"); 
       si.name = item.Text; 
       listView3.Items.Add(si.name); 
      } 
      else 
      { 
       //MessageBox.Show("Item exists"); 
      } 
     } 
yapmak için aşağıdaki yöntemi kullanarak denedi

"item == null" ifadesini "! =" Olarak değiştirirseniz, bu değer tüm eşit öğeleri verir - ancak "==" olduğunda "Nesne başvurulan bir hata" alıyorum, anladım ki; .null bir nesneye isim verin ancak metne ihtiyacım var.

Bu konuda herhangi bir yardım çok takdir edilecektir.

+0

Dozda olmayan bir şeye bir değer nasıl ayarlamayı düşünüyorsunuz? "FindItemWithText" null döndü, ölçütlerinizi karşılayan bir öğe bulunmuyor. – petric

+0

Ben onlardan biri olduğunu düşünüyorum, uzun zamandır baktım ağaçlara ormanı göremedim - doğru olarak işaretlediğim cevaba baktıktan sonra açıkça kullanmalıyım "test "değil" item.text "aslında" null.text "olacaktır. – badatseesharp

cevap

0

Muhtemelen böyle bir şey kullanmanız gerekir. Koddaki yorumlar mantığı açıklar.

// Loop over the items in the first list.... 
for (int i = 0; i < listView1.Items.Count; i++) 
{ 
    // Get the text of the item at i pos in the first listview 
    string testing = listView1.Items[i].Text; 

    // Search it in the second listview 
    ListViewItem item = listView2.FindItemWithText(testing); 

    // If not found... 
    if (item == null) 
    { 
     // Add the text to the third listview 
     listView3.Items.Add(testing); 
    } 
    else 
    { 
     MessageBox.Show("Item exists"); 
    } 
} 

NOT: Ben en son kod yukarıdaki bu bağlamda, bazı yeni servisler ekleyerek yükleme olmadığını keşfetmek istediğinizi varsayalım ilk ListView SONRA hizmetlerin listesi yükleyip olduğunu varsayar ikinci ListView hizmeti BEFORE yüklemeden içerir. Bu ise

sonra sadece başlatmak için ListView değişkenleri isimleri ..... (Ancak, bu lvBeforeInstall, lvAfterInstall gibi daha anlaşılır isimler nesneleri de size vermek lvAddedServices önermek)

+0

Bu aslında bir muamele yaptı! Si.name dosyasını, form, gerekli amaç için yeniden yüklendiğinde, daha sonra dışarıda saklamak için yaptığım bir sınıf olarak tuttum. Çok teşekkür ederim! – badatseesharp

0

ters durum değildir ile, (listeView1.Items.Count < i) geri dönerse 'u ekleyebilirsiniz; Alt yordamınızın en üstüne . Bu sıfır-ref kaçınacaktır. Verilerinizi görünüm yerine modelde karşılaştırmanızı şiddetle öneririm. MVVM veya MVC mimarisini incelemek için zaman ayırmaya ve çağdaş programlama tasarım modellerinde bu sorunun nasıl ele alınacağına değecektir.

+0

Özür dilerim, C# için yeni yapıyorum (yapımda 3 hafta) yani "görünüm yerine model" ile ne demek istiyorsunuz? Ve kesinlikle bahsettiğiniz mimarilere bir göz atacağım! Zaman ayırdığın için teşekkürler! – badatseesharp

+0

MVC tasarım desenini inceleyin ve tüm gizemler açığa çıkacaktır;) – Jace