2017-02-24 11 views
-1

私はテキストボックスとコンボボックスを含む2つのリストを持っています。 ここではテキストボックスやコンボボックスが作成されます。1つのforeach文に2つのリストを入れる方法

System.Windows.Controls.TextBox newTxt = new TextBox(); 
System.Windows.Controls.ComboBox newcombo = new ComboBox(); 
// Add Textbox 
newTxt.Text = col.Field<String>("ColumnName"); 
newTxt.Name = col.Field<String>("ColumnName"); 
newTxt.Width = 110; 

// Add Combobox 
newcombo.Items.Add(myReader.GetDataTypeName(n)); 
newcombo.Items.Add("INT"); 
newcombo.SelectedItem = myReader.GetDataTypeName(n); 
newcombo.Name = myReader.GetDataTypeName(n); 
newcombo.Width = 90; 

そして、ここで私は2つのリストを作成します。

List<TextBox> textboxes = sp.Children.OfType<TextBox>().ToList(); 
List<ComboBox> comboboxes = sp.Children.OfType<ComboBox>().ToList(); 

は、今私は、MySQLのクエリが列を編集したいです。テキストボックスのため

foreach (var count in textboxes) 
{ 
    var selected = "i dont know"; 
    config conf = new config(); 
    db_connection(); 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.CommandText = "ALTER TABLE firmenkunden CHANGE COLUMN " + count.Name + " " + count.Text + " " + selected + " NOT NULL"; 
    MessageBox.Show(cmd.CommandText); 
} 

私はcount.Nameとのテキストで名前を取得できます。だから、私は、このためのforeachを必要ColumnNameに(textbox.Name)とデータ型(combobox.SelectedItem) を必要としますcount.Textのテキストボックス。しかし、このforeachのコンボボックスから.SelectedItemをどのように取得するのですか?あなたはテキストボックスやコンボボックスの数が同じ場合は

答えて

1

、あなたはこのように、インデックスを使用してリストスルー繰り返すことができます:あなたはタイプのユーザーコントロールを持つつのリストを試すことができ

for (int i=0; i< textboxes.Count; i++) 
{ 
    //with i you can access specific textbox from one list and combo from another 
    var tb = textboxes[i]; 
    var cb = comboboxes[i]; 
} 
+0

私が手エラー:非特定変数 "i"の使用。 – xKushGene

+0

申し訳ありませんが、私は私の答えを編集した、それは 'のために(int i = 0;私は Nino

+0

私は見た。あなたの助けのためのTHX :)それは私の問題を解決した – xKushGene

0

。 Sinds TextboxとComboboxはUserControlから継承します。

使用する唯一のプロパティは次のとおりです。名前とテキストこれらは、基本UserControlのプロパティです。

// Add Textbox 
TextBox newTxt = new TextBox(); 
newTxt.Text = col.Field<String>("ColumnName"); 
newTxt.Name = col.Field<String>("ColumnName"); 
newTxt.Width = 110; 

// Add Combobox 
ComboBox newcombo = new ComboBox(); 
newcombo.Items.Add(myReader.GetDataTypeName(n)); 
newcombo.Items.Add("INT"); 
newcombo.SelectedItem = myReader.GetDataTypeName(n); 
newcombo.Name = myReader.GetDataTypeName(n); 
newcombo.Width = 90; 

controls.Add(newcombo); 
controls.Add(newTxt); 


var controls = sp.Children.OfType<UserControl>().ToList(); 

foreach (var control in controls) 
{ 
    var selected = "i dont know"; 
    config conf = new config(); 
    db_connection(); 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.CommandText = "ALTER TABLE firmenkunden CHANGE COLUMN " + control.Name + " " + control .Text + " " + selected + " NOT NULL"; 
    MessageBox.Show(cmd.CommandText); 
} 
0

あなたは1持っているので:TextBoxesComboBoxesの1の関係を、あなたはあなたが期待値を得ることを確認するためにあなたのコードでその関係を反映する必要があります。

Dictionary<string, object> d = new Dictionary<string, string>(); 

あなたValuecombobox値の型に置き換えてください、そして、あなたのtextbox文字列がKeyする必要があり、その後、あなたのループはこれである:Dictionaryようなもので、あなたは、テキストボックスの値が一意である知っているいずれかの場合:

foreach (var de in d) 
       { 
        var selected = "i dont know"; 
        config conf = new config(); 
        db_connection(); 
        MySqlCommand cmd = new MySqlCommand(); 
        cmd.CommandText = "ALTER TABLE firmenkunden CHANGE COLUMN " 
        + d.Key + " " + d.Value + " " + selected + " NOT NULL"; 
        MessageBox.Show(cmd.CommandText); 
       } 

またはprivateネストされたclassは関係を処理するために作られた:

private class Strings 
{ 
    public string A {get;set;} 
    public string B {get;set;} 
    public Strings(TextBox a, ComboBox b) 
    { 
     this.A = a.Name; this.B = b.SelectedValue.ToString(); 
    } 
} 

してから、次のように設定します。

List<Strings> x = new List<strings>(); 
x.add(new Strings(textboxcontrol, combocontrol)) 

、その後によって取り出さ:私はより良い変数名とクラス名をお勧めします

foreach (var o in x) 
       { 
        var selected = "i dont know"; 
        config conf = new config(); 
        db_connection(); 
        MySqlCommand cmd = new MySqlCommand(); 
        cmd.CommandText = "ALTER TABLE firmenkunden CHANGE COLUMN " 
        + o.A + " " + o.B + " " + selected + " NOT NULL"; 
        MessageBox.Show(cmd.CommandText); 
       } 

、私はすぐに応答していた:)

関連する問題