如何在C#中存储多分类信息?实现类Carvana窗体应用筛选功能
C#窗体应用车型筛选解决方案
1. 用类+枚举替代锯齿数组
别纠结锯齿数组了,你的场景需要存储车型的多维度信息(品牌、车身类型、名称、额外属性),用类来建模比数组灵活得多,配合你已经在用的枚举刚好:
// 品牌枚举(可直接复用你已有的) public enum CarBrand { Nissan // 后续新增品牌直接补充即可 } // 车身类型枚举 public enum BodyType { Truck, Sedan, SUV } // 车型数据模型类 public class CarModel { public CarBrand Brand { get; set; } public BodyType BodyType { get; set; } public string ModelName { get; set; } public string ExtraInfo { get; set; } // 存储"四驱"这类额外信息 }
2. 初始化数据源
把所有Nissan车型数据存在一个List<CarModel>里,后续增删改都方便:
// 在窗体类中定义全局数据源 private List<CarModel> _allCarModels = new List<CarModel> { new CarModel { Brand = CarBrand.Nissan, BodyType = BodyType.Truck, ModelName = "Titan", ExtraInfo = "四驱" }, new CarModel { Brand = CarBrand.Nissan, BodyType = BodyType.Sedan, ModelName = "Altima", ExtraInfo = "前驱" }, new CarModel { Brand = CarBrand.Nissan, BodyType = BodyType.SUV, ModelName = "Rogue", ExtraInfo = "适时四驱" } };
3. 下拉框联动逻辑
给两个下拉框(品牌、车身类型)绑定枚举,然后写统一的过滤更新方法:
绑定下拉框(窗体Load事件中)
private void CarForm_Load(object sender, EventArgs e) { // 绑定品牌下拉框 cboBrand.DataSource = Enum.GetValues(typeof(CarBrand)); // 绑定车身类型下拉框 cboBodyType.DataSource = Enum.GetValues(typeof(BodyType)); // 初始加载筛选结果 UpdateFilteredCars(); }
筛选更新方法
private void UpdateFilteredCars() { // 获取选中的品牌和车身类型 var selectedBrand = (CarBrand)cboBrand.SelectedItem; var selectedBodyType = (BodyType)cboBodyType.SelectedItem; // 双重过滤:先匹配品牌,再匹配车身类型 var filteredModels = _allCarModels.Where(car => car.Brand == selectedBrand && car.BodyType == selectedBodyType).ToList(); // 将结果绑定到展示控件(比如ListBox或ComboBox) listBoxCarModels.DataSource = filteredModels; listBoxCarModels.DisplayMember = "ModelName"; // 显示车型名称 }
绑定下拉框选中事件
给cboBrand和cboBodyType的SelectedIndexChanged事件绑定UpdateFilteredCars方法,用户切换选项时列表会自动更新。
4. 展示额外信息
如果要在用户选中车型时显示额外信息(比如四驱),给listBoxCarModels添加SelectedIndexChanged事件:
private void listBoxCarModels_SelectedIndexChanged(object sender, EventArgs e) { if (listBoxCarModels.SelectedItem is CarModel selectedCar) { lblExtraInfo.Text = $"额外信息:{selectedCar.ExtraInfo}"; } }
内容的提问来源于stack exchange,提问作者samuel
相关产品推荐
相关产品推荐

