我想我的问题与其他人的问题不同。
但是有没有办法从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);
}
}
答案 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循环中。
不,我有我想要的东西:)。