2016-07-04 4 views
0

Etwas nervt mich, aber ich weiß nicht, wie ich es lösen soll. Hier ist der Code:Wie kann ich 2 verschiedene ComboBox mit dem gleichen Code faktorisieren?

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()); 
     } 
    } 

Dies ist der gleiche Code, aber mit 2 differents Objekte als ComboBox. Ich kann nicht sehen, wie man es faktorisieren kann und es kann sehr einfach sein. Kannst du mir einen Vorteil verschaffen?

Danke

Antwort

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', richtig. – Sinatr

0

Sie auch die ComboBox und DataGridViewComboBoxColumn für Ihre eigene Implementierung außer Kraft setzen können. Posted aber mochte Sir Rufos Antwort besser. Aber wenn Sie mehr benutzerdefinierten Code hinzufügen möchten, ist dies eine Möglichkeit, dies zu tun.

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

Aber das ist auch Code wie in der Frage dupliziert. OP sucht nach einer DRY-Lösung –

+0

Sie haben Recht, Sir Rufo, Kommentare im Code hinzugefügt – lordkain

Verwandte Themen