2011-08-29 49 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

我会试试很多谢谢...... –