2016-07-04 9 views
0

何か迷惑ですが、解決方法はわかりません。2つの異なるComboBoxを同じコードで分ける方法はありますか?

public static void FillComboBox(ComboBox cb, DataTable dt) 
    { 
     cb.Items.Clear(); 
     foreach (DataRow row in dt.Rows) 
     { 
      cb.Items.Add(row[0].ToString()); 
     } 
    } 

    public static void FillComboBoxColumn(DataGridViewComboBoxColumn col, DataTable dt) 
    { 
     col.Items.Clear(); 
     foreach(DataRow row in dt.Rows) 
     { 
      col.Items.Add(row[0].ToString()); 
     } 
    } 

これは、同じコードが、コンボボックスなど2つの貴様のオブジェクトである:ここではコードです。私はそれを分解する方法を見ることができず、それは非常に簡単かもしれません。あなたは私にエッジを与えることができますか?

あなたは

答えて

4
public static void FillCollection(IList collection, DataTable dt) 
{ 
    collection.Clear(); 
    foreach (DataRow row in dt.Rows) 
    { 
     collection.Add(row[0].ToString()); 
    } 
} 

public static void FillComboBox(ComboBox cb, DataTable dt) 
{ 
    FillCollection(cb.Items, dt); 
} 

public static void FillComboBoxColumn(DataGridViewComboBoxColumn col, DataTable dt) 
{ 
    FillCollection(col.Items, dt); 
} 
+0

「IList」、右。 – Sinatr

0

あなたはまた、独自の実装のためのコンボボックスとDataGridViewComboBoxColumnを上書きすることができますありがとうございます。投稿されましたが、Rufoさんのより良い回答が気に入っています。しかし、より多くのカスタムコードを追加したい場合は、これを行う方法です。

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    static void Main() 
    { 
     DataTable dt; // values here 
     MyComboBox cb = new MyComboBox(); 
     cb.InitItems(dt); 

     MyDataGridViewComboBoxColumn gvcb = new MyDataGridViewComboBoxColumn(); 
     cb.InitItems(dt); 
    } 
} 

public class MyComboBox : ComboBox, Itest 
{ 
    // apply Sir Rufo answer here 
    public void InitItems(DataTable table) 
    { 
     Items.Clear(); 
     foreach (DataRow row in table.Rows) 
     { 
      Items.Add(row); 
     } 
    } 
} 

public class MyDataGridViewComboBoxColumn: DataGridViewComboBoxColumn, Itest 
{ 
    // apply Sir Rufo answer here 
    public void InitItems(DataTable table) 
    { 
     Items.Clear(); 
     foreach (DataRow row in table.Rows) 
     { 
      Items.Add(row); 
     } 
    } 
} 

public interface Itest 
{ 
    void InitItems(DataTable table); 
} 
+0

しかし、それは質問のように重複したコードでもあります。 OPはDRYソリューションを探しています –

+0

あなたは正しいRufoです。コードにコメントを追加しました – lordkain

関連する問題