2011-08-29 18 views
6

Mam DataGrid view1 i ListView i gdy kiedykolwiek wybrać element widoku listy (jestem przechodzącej element ListView do kwerendy i zapełnianie pogląd DataGrid Według tej pozycji)jak uniknąć powtarzającego się kodu w celu zwiększenia efektywności

mam trochę kodu podobnego ....

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 
} 

zrobiłem to jak wyżej ... Myślę, że nie jest to skuteczny sposób na kodowanie. a ten kod składa się z wielu powtarzających się linii, czy istnieje sposób na refraktorię tego kodu do małej wiązki kodu ...... w celu poprawy wydajności?

Wszelkie pomysły i przykładowe fragmenty kodu dla zwiększenia efektywności byłoby pomocne dla mnie ...

Wiele z góry dzięki ....

używam C# i writting aplikacji WinForms .....

Odpowiedz

4

Możesz zapisać delegata do elementu listview. I nazwij to, gdy wybrany zostanie element enkapsulujący. Na przykład chcesz wypełnić listbox tak:

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

Teraz, kiedy ta pozycja zostanie wybrana, należy wykonać metodę tak:

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 
} 

UWAGA! nie testowałem tego kodu, ale coś wzdłuż tych linii powinno działać i nie musisz pisać instrukcji If, musisz tylko konstruować elementy poprawnie.

Należy również pamiętać, że może to być nieco trudne do odczytania dla kogoś nowego w tym kodzie.

+0

Wielkie dzięki .... ja też spróbuję .... –

0

Można łatwo wyodrębnić nową metodę, aby wykonać "wiązanie widoku datagrid". Ta metoda jest wywoływana ze wszystkich metod, które muszą wykonać wiązanie.

+0

Poza tym istnieje możliwość zmniejszenia widoku listy wybranych elementów w jedną funkcję ... –

+1

Brakuje tu niektórych informacji (np. Czym są "a", "b", "c" i "d" ?), ale osobiście utworzyłbym interfejs z jedną metodą i klasami wywodzącymi się z tego interfejsu i umieszczonymi w widoku listy. Umieść zawartość metody 1 itd. W metodach w pochodnych klasyfikowanych. Jednak nie wiem, czy ma to sens w twoim przypadku, ale duży blok ... if zawsze mówi ci, że powinieneś pomyśleć o stworzeniu hierarchii klas i pozwolić polimorfizmowi wykombinować poprawną metodę, która musi zostać wywołana. –

+0

i wil próbować, że wiele dzięki ...... –

Powiązane problemy