2011-08-29 7 views
6

Ho un DataGrid view1 e un ListView e quando mai seleziono la voce di visualizzazione elenco (sto passando la voce ListView nella query e popolare la vista DataGrid secondo quell'articolo)come evitare il codice ripetuto per aumentare l'efficienza

ho scritto un po 'di codice come questo ....

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 
} 

ho fatto come sopra ... credo che questo non è un modo efficace per fare la codifica. e questo codice consisita di molte righe ripetute, c'è un modo per rifattorizzare questo codice su un piccolo gruppo di codice ...... per migliorare l'efficienza?

Tutte le idee e frammenti di esempio per aumentare l'efficienza codice sarebbe utile per me ...

Molte grazie in anticipo ....

Sto usando C# e scrittura per le applicazioni WinForms .....

risposta

4

È possibile salvare un delegato nell'elemento listview. E chiamalo quando viene selezionato l'elemento incapsulante. Per esempio si potrebbe riempire la casella di riepilogo in questo modo:

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

Ora, quando questa voce viene selezionata, si esegue il metodo in questo modo:

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 
} 

NOTA:! non ho testato questo codice, ma qualcosa di simile dovrebbe funzionare e non devi scrivere l'istruzione If, ​​devi solo costruire gli elementi correttamente.

Si noti inoltre che questo potrebbe essere un po 'difficile da leggere per qualcuno nuovo a questo codice.

+0

Mille grazie ... ci proverò anche io .... –

0

È possibile estrarre facilmente un nuovo metodo per eseguire "associazione datagrid view1". Questo metodo viene quindi chiamato da tutti i metodi che devono eseguire il binding.

+0

Oltre a ciò esiste la possibilità di ridurre gli elementi selezionati della vista elenco in una singola funzione ... –

+1

Qui mi mancano alcune informazioni (ad es. Cosa sono 'a',' b', 'c' e' d' ?), ma personalmente, creerei un'interfaccia con un metodo e classi che derivano da quell'interfaccia e li inseriremo nella vista elenco. Metti il ​​contenuto del metodo 1 ecc. Nei metodi nella classe derivata. Tuttavia, non so se ha senso nel tuo caso, ma un grande blocco if..else ti dice sempre che dovresti pensare a creare una gerarchia di classi e lasciare che il polimorfismo trovi il metodo corretto che deve essere chiamato. –

+0

voglio provare molte grazie ...... –

Problemi correlati