2017-12-18 121 views
1

我有一个组合框,填充了数据库的标题。过滤器表达式不计算为布尔型项,C#

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

我想这样做。

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

但是,如果我选择一个非布尔类型列它得到这个错误:

“过滤器表达式的值不为布尔术语”

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

+2

重要信息在此处不存在。 comboBox1.Text的内容是什么? (并且不要在字符串属性上调用ToString,它是没用的) – Steve

+1

“它只是显示程序的名称”我猜这是'ASH_PROD_ORDERS'中项目类型的命名空间,因为你添加了整个'columnItem' 。我认为你需要在你的'listBox1'中设置一个'DisplayMember'或者使用'listBox1.Items.Add(columnItem.Name);'或者你想显示的ash_prod_order的任何属性。 –

回答

2

如果你想显示一列没有任何条件的内容,你不需要选择,但你刚刚超过

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'列中存在'ColumnValue'字符串的表行子集。
Select的其他有用用途与创建具有特定顺序的新表格有关。请参阅DataColumn.SelectDataTableExtensions.CopyToDataTable文档

+1

谢谢,这就是我正在寻找的。 –