0

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

这就是我设置它的方式:

  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();我试图在其中一个文本框中显示值。

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

4

1 回答 1

1

有更好的方法来完成您正在做的事情,因此您可以利用DisplayMemberand ValueMember,但是您遇到的问题源于使用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}'";

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

于 2019-02-07T15:55:41.010 回答