【问题标题】:Filter expression does not evaluate to a Boolean term, C#过滤器表达式不计算为布尔项,C#
【发布时间】:2018-05-31 20:06:00
【问题描述】:

我有一个组合框,其中填充了数据库的标题。

当用户选择标题时,我想在列表框中显示该列的值。

我正在尝试这样做。

 private void button3_Click_2(object sender, EventArgs e)
    {
        listBox1.Items.Clear();

        //name of column to display data from
        var selectedColumn = comboBox1.Text.ToString();

        //dataRow array of data
        var selectedColumnItems = aSH_ORDER_DBDataSet1.ASH_PROD_ORDERS.Select(selectedColumn);

        //iterate through dataRow and display in listBox
        foreach (var columnItem in selectedColumnItems)
        {
          listBox1.Items.Add(columnItem);
        }
    }

但是,如果我选择非布尔类型的列,则会出现此错误:

“过滤器表达式不计算为布尔项”

即使我选择了一个布尔列,它也只会显示程序的名称。然而,它似乎确实从数据库中获取了一些数据,因为它从数据库中的“真实”术语的数量中显示了正确数量的程序名称。

【问题讨论】:

  • 这里缺少重要信息。 comboBox1.Text 的内容是什么? (并且不要在字符串属性上调用 ToString,这是没用的)
  • "它只是显示程序的名称" 我猜这是ASH_PROD_ORDERS中项目类型的命名空间,因为你添加了整个columnItem。我认为您要么需要在 listBox1 中设置 DisplayMember,要么使用 listBox1.Items.Add(columnItem.Name); 或您想要显示的 ash_prod_order 的任何属性。

标签: c# dataset datarow


【解决方案1】:

如果要显示单个列的内容,则无需任何条件,您不需要选择,但您只是循环到表的行

private void button3_Click_2(object sender, EventArgs e)
{
    listBox1.Items.Clear();

    //name of column to display data from
    var selectedColumn = comboBox1.Text.ToString();

    //iterate through dataRow and display in listBox
    foreach (DataRow row in aSH_ORDER_DBDataSet1.ASH_PROD_ORDERS.Rows)
    {
        listBox1.Items.Add(row[selectedColumn].ToString());
    }
}

DataTable.Select方法在需要过滤表的内容时,添加可以解析为布尔值的某种表达式。

DataRow[] result aSH_ORDER_DBDataSet1.ASH_PROD_ORDERS.Select("ColumnName = 'ColumnValue'");

在上面的示例中,我们拍摄具有名为“columnname”列中的“ColumentValue”字符串的表行的子集。
Select 的其他有用用途与创建具有特定顺序的新表相关。查看DataColumn.SelectDataTableExtensions.CopyToDataTable文档

【讨论】:

  • 谢谢,这正是我正在寻找的。​​ span>
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
相关资源
最近更新 更多