2011-08-29 50 views
6

我有一個DataGrid廠景和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 
} 

我已經做到了像上面......我想,這是不是做編碼的有效方式。和大量的重複行的這段代碼consisits,有沒有什麼辦法,以提高效率,折射此代碼一小束的代碼...... ?

提高代碼的效率將是有益的給我任何的想法和示例代碼段...

提前許多感謝....

我使用C#和書面方式的WinForms應用.....

回答

4

你可以保存一個委託到ListView項。並在封裝項目被選中時調用它。例如,你將填補你的列表框這樣的:

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

非常感謝....我也會試試你...... –

0

你可以很容易地提取新方法做了「數據網格視圖1結合」。然後從所有需要進行綁定的方法調用此方法。

+0

除此之外,是否有可能減少選擇項組合成一個功能列表視圖... –

+1

我在這裏缺少一些信息(例如什麼是'了''B','C'和'D' ?),但個人而言,我將創建一個接口,其中包含從該接口派生的一個方法和類,並將它們放入列表視圖中。將方法1的內容等放在派生類中的方法中。然而,我不知道你的情況是否有意義,但是一個大的if..else塊總是告訴你應該考慮創建一個類層次結構,並讓多態性找出需要調用的正確方法。 –

+0

我會試試很多謝謝...... –