【发布时间】:2017-10-24 09:05:30
【问题描述】:
我想我的问题与其他人的不同。
但是有没有办法从 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);
}
}
【问题讨论】:
-
"例如 row.Field
("ColumnValue")" 是的,就是这样。问题可以结束了吗? -
问题不清楚。似乎您有一个模式表,其中仅包含有关数据库中表的元信息。如果您想要这些值,您应该使用有效的 sql 读取它们,然后通过 DataAdapter 填充 DataTable。
-
问题是没有(“ColumnValue”)。是的,我阅读了 schemaInfo 以获取 ColumnName 和 AllowDBNull。 ColumnName 是带有 ColumnName 标签的文本框。现在我想将 Column 的值放在 TextBox.Text 属性中。这就是为什么我不能做 while(reader.Read()) 编辑我的问题。
-
如果您只选择模式表,则没有
ColumnValue。此 DataTable 从不包含有关表中值的信息,而仅包含有关列的信息。该表中的每一行都是关于一列的信息行,而不是关于包含每一列值的数据行。 -
我再次编辑了我的问题。我的 DataReader 只包含 KeyInfo 但仍然给我第一列的第一个值。不是其他人,但事实是,尽管我将
CommandBehaivor.KeyInfo用于我的 DataReader,但我得到了我想要的值。