从DataRow获取Column值

时间:2017-10-24 09:05:30

标签: c# .net

我想我的问题与其他人的问题不同。

但是有没有办法从DataRow获取行的值? 现在我有以下foreach来获取schemaInfos:

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中做到这一点。 也许还有另一个DataColumn属性来获取示例row.Field<String>("ColumnValue")或类似值的值。

我也尝试了以下内容,它只给出了第一列的值而不是其他列的值。

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

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决问题的方法:

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循环复制到了使用中。并根据我的问题对我编辑的Code进行了测试,该问题与本规范类似。但是其他代码只给了我第一列的价值。然后我尝试删除那些不起作用的if(dataReader.Read())因为我之前需要使用Read()

所以我把while(dataReader.Read())放在顶部并将我的foreach循环放在while循环中。

不,我有我想要的东西:)。