c# winform两个列表控件公用一个数据集,右边的列表里不能出现左边列表里选中的项
技术栈:泛型+linq
左边列表绑定数据
/// <summary>
/// 加载执行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Select_Load(object sender, EventArgs e)
{
RegionDataTable();
this.DepartureComboBox.ValueMember="id";
this.DepartureComboBox.DisplayMember="name";
this.DepartureComboBox.DataSource=regionDataTable;
}
初始化共享数据集
ModelConvertHelper<RegionModel>.ConvertToModel(dt)
C# DataTable类型 转换成 List集合类型的方法
https://blog.csdn.net/cplvfx/article/details/88927448
List<RegionModel> regionDataTable=null;
/// <summary>
/// 获取航线列表
/// </summary>
private void RegionDataTable()
{
string sql = "select id, name from Region";
DataTable dt=DBHelper.GetDataTable(sql);
//调用DataTable类型 转换成 List集合类型 帮助类
regionDataTable= ModelConvertHelper<RegionModel>.ConvertToModel(dt);
}
左边选中有给右边列表赋值
/// <summary>
/// 选择出发地,触发该方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DepartureComboBox_SelectionChangeCommitted(object sender, EventArgs e)
{
//获取当前选中的 “出发地”
RegionModel departure_value = this.DepartureComboBox.SelectedItem as RegionModel;
//声明一个泛型集合
List<RegionModel> destination_value = new List<RegionModel>();
//查询在内存中地区的信息,并且地区信息不包含刚才选中的信息
var list=from r in regionDataTable where r.id!=departure_value.id select r;
//把查询出来的结果返回给泛型集合
destination_value=list.ToList();
//给“目的地”控件绑定数据
this.DestinationComboBox.ValueMember = "id";//value隐藏值
this.DestinationComboBox.DisplayMember = "name";//Display显示
this.DestinationComboBox.DataSource = destination_value;
}