检查组合框是否包含从 SQL 读取的项

本文关键字:SQL 读取 包含 检查组 组合 是否 检查 | 更新日期: 2023-09-27 18:32:29

我得到了这个SqlCommand,根据数据库中read的内容,selects combo-box中的项目。

组合框包含 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();

检查组合框是否包含从 SQL 读取的项

组合

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

将组合框绑定到数据源时,它会使用 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");

如果使用数据表执行数据绑定,这应该可以工作:

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