2017-10-24 89 views
-1

私の質問はこれについて他のものと異なると思います。DataRowからカラム値を取得

しかし、DataRowから行の値を取得する方法はありますか?今の 私はschemaInfosを取得するには、次のforeachがあります

foreach (DataRow row in schemaTable.Rows 
{ 
    if (row.Field<String>("ColumnName") != "id") 
    { 
     TextBox textBox = new TextBox(); 
     MaterialDesignThemes.Wpf.HintAssist.SetHint(textBox, UppercaseFirst(row.Field<String>("ColumnName"))); 
     textBox.Name = row.Field<String>("ColumnName"); 
     textBox.Tag = row.Field<Boolean>("AllowDBNull"); 
     textBox.Text = // Here I want to put the value like row.Field<String>("ColumnValue") 
     StackPanel.Children.Add(textBox); 
    } 
} 

私の質問は、私もこのforeachのを経由して列の値を取得することができますか? は通常のために私は値を取得するには、次の操作を行う必要があります。

while(reader.Read()) 
{ 
    textBox.Text = reader[i].ToString(); 
} 

をしかし、私はあまりにも私のDataRowのforeachでこれを行うことができないと思います。 おそらく、値row.Field<String>("ColumnValue")またはそのような値を取得する別のDataColumnプロパティがあります。

私は最初の列の値だけを返しますが、他の列は返しませんでした。

int i = 1; 

foreach (DataRow field in schemaTable.Rows) 
{ 
    if (field.Field<String>("ColumnName") != "id") 
    { 
     TextBox textBox = new TextBox(); 
     MaterialDesignThemes.Wpf.HintAssist.SetHint(textBox, UppercaseFirst(field.Field<String>("ColumnName"))); 
     textBox.Name = field.Field<String>("ColumnName"); 
     textBox.Tag = field.Field<Boolean>("AllowDBNull"); 

     if (dataReader.Read()) 
     { 
      textBox.Text = dataReader[i].ToString(); 
     } 

     i++; 

StackPanel.Children.Add(textBox); 
    } 
} 
+0

を持っています。質問は終了できますか? –

+0

質問は不明です。あなたは、データベース内のテーブルに関するメタ情報だけを含むスキーマテーブルを持っているようです。値が必要な場合は、有効なSQLを使用して値を読み取ってから、DataAdapterを介してDataTableに入力してください。 –

+0

物事はない( "ColumnValue")です。 私はschemaInfoを読んでColumnNameとAllowDBNullを取得しました。 ColumnNameは、ColumnNameのラベルを持つテキストボックスです。今度は、Columnの値をTextBox.Textプロパティに入れたいと思います。だから私はしばらくすることができません(reader.Read())私の質問を編集しました。 – Luranis

答えて

0

わかりました、私は私の問題を解決する方法を見つけました:

最初
using(MySqlCommand cmd = new MySqlCommand()) 
{ 
    cmd.Connection = connection; 
    cmd.CommandText = sql; 
    dataReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 
    schemaTable = dataReader.GetSchemaTable(); 
    int i = 1; 
    while(dataReader.Read()) 
    { 
     foreach(DataRow field in schemaTable.Rows) 
     { 
     if(field.Field<String>("ColumnName") != "id") 
     { 
      TextBox textBox = new TextBox(); 
      textBox.Name = field.Field<String>("ColumnName"); 
      textBox.Tag = field.Field<Boolean>("AllowDBNull"); 
      textBox.Text = dataReader[i].ToString(); 

      StackPanel.Children.Add(textBox); 
      i++; 
     } 
     } 
    } 

私が使用して私のforeachループをコピーしました。私の質問に編集したコードは、このコードと似ています。しかし、他のコードは、私に最初の列の値だけを与えました。その後、私はif(dataReader.Read())を取り除こうとしましたが、それは前にRead()を使用する必要があるために機能しませんでした。

私はwhile(dataReader.Read())を最上部に置き、whileループ内にforeachループを配置しました。

ない

んが、私は "(ColumnValue ")" _はいそれはそれだ例row.Field は、" _私が何をしたい:)

関連する問題