首页 > 解决方案 > 从 ComboBox BindingSource 获取对象

问题描述

我正在使用 C# Winforms 开展一个学校项目,我必须在其中创建车辆销售发票并打开一个新表单,其中包含从组合框中选择的车辆信息。如何根据组合框中的 SelectedItem 获取 Vehicle 对象或其属性?

Vehicle 对象位于一个列表中,该列表绑定到绑定到组合框的 BindingSource。我能够将静态字符串传递给此分配的另一个组件中的新表单,但我不知道如何检索对象信息。

我绑定到组合框的车辆列表。DataRetriever 是为我们提供 Vehicle 对象的类。它们具有自动实现的属性(品牌、型号、ID、颜色等)

List<Vehicle> vehicles = DataRetriever.GetVehicles();
            BindingSource vehiclesBindingSource = new BindingSource();
            vehiclesBindingSource.DataSource = vehicles;
            this.cboVehicle.DataSource = vehiclesBindingSource;
            this.cboVehicle.DisplayMember = "stockID";
            this.cboVehicle.ValueMember = "basePrice";

我希望能够将信息传递到此表单并显示有关带有标签的所选车辆的信息。

private void vehicleInformationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            VehicleInformation vehicleInformation = new VehicleInformation();
            vehicleInformation.Show();
        }

标签: c#winformsdata-bindingcombobox

解决方案


  1. Form_Load

    List<VecDetails> lstMasterDetails = new List<VecDetails>();
    
    private void frmBarcode_Load(object sender, EventArgs e)
    {
        VechicleDetails();
    
        BindingSource vehiclesBindingSource = new BindingSource();
        vehiclesBindingSource.DataSource = lstMasterDetails;
        this.comboBox1.DataSource = vehiclesBindingSource;
        this.comboBox1.DisplayMember = "stockID";
        this.comboBox1.ValueMember = "basePrice";
    }
    
  2. VechicleDetails()方法中,我只是生成样本值,所以我可以让他们ComboBox

    private void VechicleDetails()
    {
        //Sample Method to Generate Some value and 
        //load it to List<VecDetails> and then to ComboBox
        for (int n = 0; n < 10; n++)
        {
            VecDetails ve = new VecDetails();
            ve.stockID = "Stock ID " + (n + 1).ToString();
            ve.basePrice = "Base Price " + (n + 1).ToString();
            lstMasterDetails.Add(ve);
        }
    }
    
  3. 现在在comboBox1_SelectedIndexChanged事件中,我正在获取所选项目的价值

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
       try
       {
          string strStockId = comboBox1.Text.ToString();
          string strBasePrice = (comboBox1.SelectedItem as dynamic).basePrice;
          label1.Text = strStockId + " - " + strBasePrice;
       }
       catch (Exception ex)
       {
           MessageBox.Show(ex.ToString());
       }
    }
    

例子


推荐阅读