2017-12-18 73 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

謝謝,這就是我正在尋找的。 –