2011-08-29 33 views
6

Tôi có một view1 DataGridListView và khi bao giờ tôi chọn mục danh sách view (Tôi đang đi qua các ListView mục vào truy vấn và Populating quan điểm DataGrid tùy theo mục đó)thế nào để tránh mã lặp đi lặp lại để nâng cao hiệu quả

tôi đã viết một số mã như thế này ....

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 
} 

tôi đã thực hiện nó như ở trên ... tôi nghĩ rằng đây không phải là một cách hiệu quả để thực hiện mã hóa. và mã số này của rất nhiều dòng lặp lại, có cách nào để khúc xạ mã này cho một bó nhỏ của mã ...... để nâng cao hiệu quả?

Bất kỳ ý tưởng và đoạn mẫu để tăng hiệu quả mã sẽ rất hữu ích với tôi ...

Nhiều cảm ơn trước ....

Tôi đang sử dụng C# và writting ứng dụng WinForms .....

Trả lời

4

Bạn có thể lưu một đại biểu vào mục danh sách xem. Và gọi nó khi mục đóng gói được chọn. Ví dụ, bạn sẽ điền vào listbox của bạn như thế này:

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

Bây giờ, khi mặt hàng này được chọn, bạn thực hiện phương pháp này như sau:

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 
} 

LƯU Ý:! đã không thử nghiệm mã này, nhưng một cái gì đó dọc theo những dòng đó sẽ làm việc và bạn không phải viết câu lệnh If, bạn chỉ phải xây dựng các mục một cách chính xác.

Cũng lưu ý rằng điều này có thể hơi khó đọc đối với người mới sử dụng mã này.

+0

Rất cám ơn .... tôi cũng sẽ cố gắng .... –

0

Bạn có thể dễ dàng trích xuất một phương pháp mới để thực hiện "ràng buộc xem dữ liệu1". Phương pháp này sau đó được gọi là từ tất cả các phương pháp cần phải làm các ràng buộc.

+0

Ngoài ra, có khả năng giảm danh sách xem các mục đã chọn thành một hàm ... –

+1

Tôi thiếu một số thông tin ở đây (ví dụ: 'a',' b', 'c' và' d' ?), nhưng cá nhân, tôi sẽ tạo ra một giao diện với một phương thức và các lớp bắt nguồn từ giao diện đó và đặt chúng vào khung nhìn danh sách. Đặt nội dung của method1, v.v. trong các phương thức trong lớp dẫn xuất. Tuy nhiên, tôi không biết nếu nó có ý nghĩa trong trường hợp của bạn, nhưng một khối if..else lớn luôn cho bạn biết rằng bạn nên suy nghĩ về việc tạo ra một hệ thống phân cấp lớp và cho phép đa hình tìm ra phương pháp đúng cần được gọi. –

+0

i wil cố gắng cảm ơn rất nhiều ...... –

Các vấn đề liên quan