使用Access数据库从列表框到文本框显示具有多个值的项目

时间:2019-02-07 15:32:41

标签: c# ms-access

当我在列表框中选择一个项目时,我试图在其各自的文本框中显示项目值

这是我的设置方式:

  1. 这是将值显示在列表框中的方式

            command.CommandText = "select * from ItemsList";
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                EditItemBrowserBox.Items.Add(reader["ID"].ToString() + "         " + reader["ItemBrand"].ToString() + "  " + reader["ItemName"].ToString() + "  " + reader["ItemType"].ToString() + "  " + reader["ItemPrice"].ToString());   
            }
    
  2. 这就是我试图使列表框中的值显示到文本框中的方式

            command.CommandText = "select * from ItemsList where ItemName='" + EditItemBrowserBox.Text + "' ";
            OleDbDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                EditIDTB.Text = reader["ID"].ToString();
                ItemNameAddTB.Text = reader["ItemName"].ToString();
                ItemTypeAddTB.Text = reader["ItemType"].ToString();
                ItemBrandAddTB.Text = reader["ItemBrand"].ToString();
                ItemPriceAddTB.Text = reader["ItemPrice"].ToString();
            }
    

EditItemBrowserBox是列表框,EditIDTB.Text = reader["ID"].ToString();是我试图在其中一个文本框中显示值的方法。

现在,当我单击一个项目时,文本框中没有任何显示。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

有更好的方法来完成您的工作,因此您可以利用DisplayMemberValueMember的优势,但是您遇到的问题源于使用整个Text显示给用户的字段。

如果他们的选择如下:

001     Acme  Anvil  Weapon  10.00

那么您的查询最终将是:

select * from ItemsList where ItemName='001     Acme  Anvil  Weapon  10.00'

只需拆分您感兴趣的部分即可

var itemName =
    EditItemBrowserBox.Text.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries)[2];

command.CommandText = $"select * from ItemsList where ItemName='{itemName}'";

要解决具有多个空格的商品名称的问题,您可能希望根据ID进行选择:

var id = EditItemBrowserBox.Text.Split(' ')[0];

command.CommandText = $"select * from ItemsList where ID='{id}'";

您可能还想检查参数化查询,但这是另一个问题...