c# winform两个列表控件公用一个数据集,右边的列表里不能出现左边列表里选中的项

本文介绍了一个使用C# WinForm实现的两个列表控件联动的例子。通过泛型和LINQ技术,实现了当左侧列表选中某项后,右侧列表会自动过滤掉已选中的选项,确保两边的数据互不重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

            
        }

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙-极纪元JJYCheng

客官,1分钱也是爱,给个赏钱吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值