1

我已经根据数据库中的内容获得了SqlCommandselects项目。combo-boxread

组合框包含 4 个值。(应该选择其中之一)

我有一个问题,因为我需要检查从 SQL DB 读取的值是否是组合框项目之一。

请问代码应该是什么样子的?

SqlCommand command= new SqlCommand("SELECT * FROM client WHERE ID_K='" + choose_id + "'", con);
con.Open();
SqlDataReader read= command.ExecuteReader();

if (read.Read())
{
     if (read["price"] != DBNull.Value)
     {
         cb_choose_price.SelectedItem = read.GetString(read.GetOrdinal("price"));
     }} con.Close();
4

2 回答 2

2

组合框组件的SelectedItem属性绑定到存储在其中的实际对象(或者更确切地说是对这些对象的引用)。如果要通过显示的字符串设置选定项目,则必须获取项目集合,将它们转换为字符串,然后选择适当的项目。查看我的 Person 类型的代码示例。

当您将组合框绑定到数据源时,它会使用 ToString() 方法显示引用的对象。例如:

class Person
{
   public string Name { get; set; }
   public int Age { get; set; }
}

var persons = new List<Person> { 
    new Person("Adam", 10), 
    new Person("Thomas", 20) };
comboBox.DataSource = persons;
comboBox.DisplayMember = "Name";

comboBox.SelectedItem = "Adam"; // this will not display a person named Thomas because the combobox is binded to the Person type
comboBox.SelectedItem = persons.Where(p => p.Name == "Thomas").Single(); // this will show Adam if it is available in the comboBox

根据评论更新:

我想我明白所有这些,但是有没有办法检查应该选择的项目(来自 SQL DB 的字符串)是否存在于组合框中的项目列表中?

var item = comboBox1.Items.Cast<Person>();
bool isThereAdam = item.Any(i => i.Name == "Adam");
于 2013-09-22T15:44:32.027 回答
0

如果您使用 DataTable 进行数据绑定,这应该可以:

private void BindClientCombobox(DataTable clientDataTable)
{
    this.cbClients.DataSource = clientDataTable;
    this.cbClients.ValueMember = "client_id";
    this.cbClients.DisplayMember = "client_name";
}

private bool ContainsClientID(int clientID)
{
    return this.cbClients.Items.Cast<DataRowView>().Any(drv => (int)drv.Row.ItemArray[0] == clientID);
}

private bool ContainsClientName(string clientName)
{
    return this.cbClients.Items.Cast<DataRowView>().Any(drv => (string)drv.Row.ItemArray[1] == clientName);
}
于 2014-07-09T04:04:17.150 回答