簡體   English   中英

C# winforms:將 ListBox SelectedItem 綁定到另一個 ListBox

[英]C# winforms: Bind ListBox SelectedItem to another ListBox

我有這個 model:

class Car
{
  string CrewNickname { get; set; }
  Líst<string> RacersNames { get; set; }
}

class StartingField
{
  List<Car> Cars { get; set; }
}

我需要的是在一個列表框中顯示汽車,當我單擊任何一輛車時,在第二個列表框中顯示其賽車手的姓名。 我還需要能夠添加/刪除汽車和添加/刪除/編輯賽車手。

我還沒有找到任何合適的教程或問題,但我認為這一定是可以創建的。

任何幫助表示贊賞。

您應該對引發 SelectedValueChanged 事件的第一個列表框使用 OnSelectedIndex 方法。 然后根據第一個列表框的選定索引填充第二個列表框。

你可以這樣做:

  • 使用兩個 BindingSource 對象將列表中的每個 Car 鏈接到其RacersNames列表
  • 在第一個 ListBox 中添加一個用於顯示每個汽車名稱的屬性( CarID屬性只是為了顯示ValueMember的使用)
  • 當然,您需要公共屬性。

BindingSource bsCars = null;
BindingSource bsRacers = null;
StartingField startingField = null;

public class Car
{
    public Car(string carName, int carID) { CarName = carName; CarID = carID; }
    public string CarName { get; }
    public int CarID { get; }
    public List<string> RacersNames { get; set; } = new List<string>();
}

public class StartingField
{
    public List<Car> Cars { get; } = new List<Car>();
}

初始化數據源並設置BindingSource對象和ListBoxes的DataSource。
由於第二個 BindingSource 鏈接到第一個 BindingSource 的RacersNames屬性,當您 select 在第一個 ListBox 中的汽車名稱時,第二個 BindingSource 將更新其內容,因此,綁定到它的 ListBox 將顯示RacersNames列表與新的選擇有關。

可以從兩個列表中添加或刪除元素。

您可以將此代碼添加到表單的Load事件(或OnLoad()覆蓋)。

startingField = new StartingField();
var c1 = new Car("Car1", 1) { RacersNames = { "Racer1", "Racer2", "Racer3" } };
var c2 = new Car("Car2", 2) { RacersNames = { "Racer4", "Racer5", "Racer6" } };
var c3 = new Car("Car3", 3) { RacersNames = { "Racer7", "Racer8", "Racer9" } };

startingField.Cars.AddRange(new[] { c1, c2, c3});

bsCars = new BindingSource(startingField.Cars, "");
bsRacers = new BindingSource(bsCars, "RacersNames");

listBox1.DisplayMember = "CarName";
listBox1.ValueMember = "CarID";
listBox1.DataSource = bsCars;
listBox2.DataSource = bsRacers;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM