2011-08-29 7 views
6

Tengo un Vista1 DataGrid y una ListView y cuando cada vez que seleccione el elemento de lista (que estoy pasando el elemento ListView en la consulta y llenar la vista DataGrid de acuerdo con ese artículo)cómo evitar el código repetida para aumentar la eficiencia

he escrito algo de código como este ....

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 
} 

lo he hecho como la de arriba ... creo que esto no es una forma eficaz de hacer la codificación. y este código consta de muchas líneas repetidas, ¿hay alguna manera de refractar este código a un pequeño grupo de código ...... para mejorar la eficiencia?

Todas las ideas y fragmentos de muestra para aumentar la eficiencia del código sería útil para mí ...

Muchas gracias de antemano ....

estoy usando C# y escribiendo aplicaciones WinForms .....

Respuesta

4

Puede guardar un delegado en el elemento listview. Y llámalo cuando se selecciona el elemento de encapsulado. Por ejemplo, usted podría llenar el cuadro de lista como esta:

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

Ahora, cuando este producto se selecciona, se ejecuta el método de este 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:! No he probado este código, pero algo en ese sentido debería funcionar y no es necesario escribir el enunciado If, solo debe construir los elementos correctamente.

También tenga en cuenta que esto puede ser un poco difícil de leer para alguien nuevo en este código.

+0

Muchas gracias .... te intentaré también ... –

0

Puede extraer fácilmente un nuevo método para realizar la "unión de la cuadrícula de la vista de datos1". Este método es llamado desde todos los métodos que necesitan hacer el enlace.

+0

Aparte de eso, existe la posibilidad de reducir la lista de elementos seleccionados en una sola función ... –

+1

Me falta algo de información aquí (por ejemplo, ¿qué son 'a',' b', 'c' y' d' ?), pero personalmente, crearía una interfaz con un método y clases que se derivan de esa interfaz y los pondría en la vista de lista. Coloque el contenido de method1, etc. en los métodos en la clase derivada. Sin embargo, no sé si tiene sentido en su caso, pero un bloque grande si ... siempre le dice que debe pensar en crear una jerarquía de clases y dejar que el polimorfismo descubra el método correcto que necesita llamarse. –

+0

intentaré muchas gracias ...... –

Cuestiones relacionadas