2011-08-29 22 views
6

Bir DataGrid view1 ve bir ListView var ve ne zaman liste görünümü öğesini seçtiğimde (ListView öğesini sorguya aktarıyorum ve DataGrid görünümünü o öğeye göre dolduruyorum)Verimliliği artırmak için tekrarlanan kodun nasıl önleneceği

Böyle bir kod yazdım. ..

 private void listview_selectedindexchanged(object sender event args) 
{ 
    if (listview.SelectedItems.Count > 0 && listview.SelectedItems[0].Group.Name == "abc") 
    { 
      if(lstview.SelectedItems[0].Text.ToString() == "sfs") 
      { 
       method1(); 
      } 
      else 
      { 
       // datagrid view1 binding 
       blah..... 
      } 
    } 
    if (lstview.SelectedItems.Count > 0 && lstview.SelectedItems[0].Group.Name == "def") 
    { 

      if(lstview.SelectedItems[0].Text.ToString() == "xyz") 
      { 
       method 1(); 
      } 
      if(lstview.SelectedItems[0].Text.ToString() == "ghi") 
      { 
       method 2(a,b); 
      } 
      if(lstview.SelectedItems[0].Text.ToString() == "jkl") 
      { 
       method 2(c,d); 
      } 
      if(lstview.SelectedItems[0].Text.ToString() == "mno") 
      { 
       method 3(); 
      } 

     } 
    } 
private void method 1() 
{ 
    // datagrid view1 binding 
    blahh  
} 
private void method 2(e,g) 
{ 
    // datagrid view1 binding 
    blah....blah.. 
} 
private void method 3() 
{ 

    // datagrid view1 binding 
} 

Yukarıdaki gibi yaptım ... Bu kodlama yapmak için etkili bir yol olmadığını düşünüyorum. ve bu kod çok sayıda tekrarlanan çizgilerden dolayı, bu kodu verimi artırmak için bu kodu küçük bir kod ...... 'e geri göndermenin herhangi bir yolu var mı?

Kod verimliliğini artırmak için herhangi bir fikir ve örnek parçacıkları bana yardımcı olacaktır ...

Şimdiden çok teşekkürler ....

C# kullanıyorum ve WinForms uygulamalarını yazıyorum .....

cevap

4

Bir temsilci listview öğesine kaydedebilirsiniz. Ve kapsülleyici madde seçildiğinde bunu çağır. Örneğin bu gibi listbox doldururdu:

Şimdi
ListViewItem item = new ListViewItem("abc"); 
item.Tag = new Delegate(method1); 
lstview.Items.Add(item); 

, bu öğe seçili geçtiğinde, şöyle çalıştırma yöntemi:

private void listview_selectedindexchanged(object sender event args) 
{ 
    ((Delegate)lstview.SelectedItems[0].Tag)(); // this will execute method1 if the item with text "abc" gets selected 
} 

NOT:! Bu kodu test etmediniz, ancak bu satırlardaki bir şey çalışmalı ve If-cümlesi yazmanız gerekmez, sadece öğeleri doğru bir şekilde oluşturmalısınız. Ayrıca, bu kodda yeni olan birinin okunmasının biraz zor olabileceğini unutmayın.

+0

Çok teşekkürler .... ben de seni deneyeceğim .... –

0

"Datagrid view1 binding" işlemini yapmak için kolayca yeni bir yöntem çıkartabilirsiniz. Bu yöntem daha sonra bağlayıcı yapmak için gereken tüm yöntemlerden denir.

+0

Bunun dışında, liste görünümünde seçilen öğeleri tek bir işlevde küçültme olasılığı var ... –

+1

Burada bazı bilgileri kaçırıyorum (örneğin, 'a',' b', 'c' ve' d' ?), ama kişisel olarak, bir arabirim ve bu arabirimden türeyen ve bunları liste görünümüne yerleştiren sınıfları olan bir arabirim oluştururdum. Türetilmiş sınıflanmış yöntemlerde yöntem1 vb içeriğini koyun. Bununla birlikte, sizin durumunuzda bir anlam ifade edip etmediğini bilmiyorum, ama büyük bir blok, her zaman bir sınıf hiyerarşisi oluşturmayı düşünmeniz gerektiğini ve polimorfizmin çağrılması gereken doğru yöntemi anlamasını sağlamanız gerektiğini söyler. –

+0

Ben çok teşekkürler teşekkürler ...... –

İlgili konular