[英]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 方法。 然后根據第一個列表框的選定索引填充第二個列表框。
你可以這樣做:
RacersNames
列表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.