как избежать повторного кода для повышения эффективности - PullRequest
6 голосов
/ 29 августа 2011

У меня есть DataGrid view1 и ListView, и когда я выбираю элемент представления списка (я передаю элемент ListView в запрос и заполняю представление DataGrid в соответствии с этим элементом)

Я написал некоторый код, подобный этому ...

 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
}

Я сделал это, как описано выше ... Я думаю, что это не эффективный способ сделать кодирование.и этот код состоит из множества повторяющихся строк, есть ли способ рефракторинга этого кода в небольшой набор кода ...... для повышения эффективности?

Мне были бы полезны любые идеи и примеры фрагментов для повышения эффективности кода ...

Заранее большое спасибо ....

Я использую c # и пишу WinFormsприложений .....

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

Вы можете сохранить делегата в элемент списка.И вызывайте его, когда выбран инкапсулирующий элемент.Например, вы должны заполнить свой список следующим образом:

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

Теперь, когда этот элемент выбран, вы выполняете метод следующим образом:

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
}

ПРИМЕЧАНИЕ:!я не тестировал этот код, но что-то в этом роде должно работать, и вам не нужно писать оператор If, вам нужно только правильно составить элементы.

Также обратите внимание, что это может быть довольно сложночитать для кого-то нового для этого кода.

0 голосов
/ 29 августа 2011

Вы можете легко извлечь новый метод для выполнения привязки datagrid view1.Этот метод затем вызывается из всех методов, которые должны выполнять привязку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...