• DevExpress Winform SearchGridLookUpEdit多选简单设置


    原文链接:https://blog.csdn.net/u012097590/article/details/119039874

    DevExpress提供了不少的下拉编辑框,而且样式和功能都非常的强大,不像原生的控件,只有一个ComboBox,仅仅支持单列,多列的情况往往都得自己写。

    DevExpress在拥有ComboBoxEdit这种类似原生控件的同时还提供了其他的丰富多样的下拉编辑框:

    比如常用的可以绑定数据源而且支持多列显示的LookUpEdit,GridLookUpEdit,SearchLookUpEdit,还有CheckedComboBoxEdit这种可以多选的下拉边框框等等,不过虽然CheckedComboBoxEdit虽然支持多选,但还是只能显示单列,不能满足我们复杂的显示要求,所以要么利用Dev提供的PopupContainerEdit+PopupContainerControl+GridControl组合成属于自己的下拉多列多选的控件,要么就改良一下GridLookUpEdit或者SearchLookUpEdit。

    众所周知,这两个控件都是单选的,细心的人员可能能看出来,其实这两个控件的下拉窗口里面的列表其实是用来GridControl来显示的,我们可以在Properties属性里面找到PopupView(早先的版本没有这个属性,但有View的属性),这个属性返回的正式GridView。

    知道结构后,我们利用GridView的复选框列来改良我们的SearchLookUpEdit,使其能够实现多选的操作;

    简单说一下过程逻辑:

    1、显示复选框列

    2、下拉框界面关闭的时候获取列表选择的数据并且存放起来

    3、利用CustomDisplayText事件,根据选择的数据,利用指定符号拼接起来,设置编辑框的Text

    了解这个逻辑就直接写代码:

    
    
         /// <summary>
            /// 设置SearchGridLookUpEdit控件可以多选
            /// </summary>
            /// <param name="edit"></param>
            /// <param name="separator"></param>
            public static void SetSearchGridLookUpEditMultiSelect(DevExpress.XtraEditors.GridLookUpEditBase edit, string separator = ",")
            {
                var view = edit.Properties.PopupView as DevExpress.XtraGrid.Views.Grid.GridView;
                view.OptionsSelection.MultiSelect = true;
                view.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
                view.OptionsSelection.CheckBoxSelectorColumnWidth = 45;
                var values = new List<string>();
                values.Add("name1");
                values.Add("name2");
                values.Add("name3");
                edit.Properties.Tag = values;//将集合存放在Tag,如果想获取选择的集合,可以直接取Tag再转换
    
                //下拉框显示时候勾选,可以用于初始值设置或者如果在GridView中的使用
                edit.Popup += (s, e) =>
                {
                    view.ClearSelection();
                    view.BeginSelection();
                    for (int i = 0; i < view.RowCount; i++)//view.RowCount
                    {
                        var value = view.GetRowCellDisplayText(i, edit.Properties.DisplayMember);
                        if (values.Contains(value))
                        {
                            view.SelectRow(i);
                        }
                    }
                    view.EndSelection();
                };
                //关闭下拉框的时候获取选中的集合
                edit.CloseUp += (s, e) =>
                {
                    values.Clear();
                    var indexs = view.GetSelectedRows();
                    foreach (var index in indexs)
                    {
                        var value = view.GetRowCellDisplayText(index, edit.Properties.DisplayMember);
                        values.Add(value);
                    }
                    edit.RefreshEditValue();
                };
                //根据选中的集合设置显示文本并且用符号拼接起来
                edit.Properties.CustomDisplayText += (s, e) =>
                {
                    if (!edit.IsPopupOpen)
                        e.DisplayText = string.Join(separator, values.ToArray());
                };
            }
    
    

      实例代码: 1 public Form1()

     2         {
     3             InitializeComponent();
     4  
     5             gridLookUpEdit2.Properties.DataSource = CreateDt();
     6             gridLookUpEdit2.Properties.DisplayMember = "name";
     7             gridLookUpEdit2.Properties.ValueMember = "id";
     8             SetSearchGridLookUpEditMultiSelect(gridLookUpEdit2);

              //这条代码用作与触发Popup事件,进行主动触发赋值.
              gridLookUpEdit2.Properties.NullText = "---";       

     9         }
    10         DataTable CreateDt()
    11         {
    12             var dt = new DataTable();
    13             dt.Columns.Add("id");
    14             dt.Columns.Add("name");
    15             for (int i = 0; i < 20; i++)
    16             {
    17                 dt.Rows.Add(i, "name" + i);
    18             }
    19             return dt;
    20         }

    演示:

  • 相关阅读:
    Guava入门第四章(Objects)
    Guava入门第三章(Preconditions)
    Guava入门第二章(Splitter)
    Guava入门第一章(Joiner)
    Docker入门第六章
    Docker遇到的问题
    Docker命令图
    2016-08-26-Java比较器的使用
    2017-10-6-MyBatis配置简述
    2017-9-17-Java Exception小结
  • 原文地址:https://www.cnblogs.com/RCJL/p/16343362.html
Copyright © 2020-2023  润新知