TreeLookUpEdit、SearchLookUpEdit、GridLookUpEdit 控件多选设置

这三类均属于LookUpEdit类,其多选显示文本方法,基本相似,有多选属性设置稍微有点区别:

SearchLookUpEdit、GridLookUpEdit 多选属性设置
lue.Properties.View.OptionsSelection.MultiSelect = true;
lue.Properties.View.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect;
lue.Properties.View.OptionsSelection.CheckBoxSelectorColumnWidth = 40;
TreeLookUpEdit多选属性设置
treeLUE.Properties.TreeList.OptionsSelection.MultiSelect = true;
treeLUE.Properties.TreeList.OptionsSelection.MultiSelectMode = TreeListMultiSelectMode.RowSelect;
treeLUE.Properties.TreeList.OptionsView.CheckBoxStyle = DefaultNodeCheckBoxStyle.Check;
TreeLookUpEdit封装方法
 /// <summary>
/// 绑定TreeLookUpEdit,同时返回选中节点ValueMember集合
/// </summary>
/// <param name="treeLUE">控件名称</param>
/// <param name="obj">数据源</param>
/// <param name="display">显示文本</param>
/// <param name="value">ValueMember值</param>
/// <param name="isMulti">多选</param>
/// <param name="expand">节点展开、收缩</param>
public static List<string> SetTreeLookUpEdit(TreeListLookUpEdit treeLUE,object obj,string display,string value,bool isMulti=false,bool expand=false)
{
    var valueList = new List<string>();
    // 绑定数据源
    treeLUE.Properties.DataSource = obj;
    treeLUE.Properties.DisplayMember = display;
    treeLUE.Properties.ValueMember = value;
    // 节点展开、收缩
    treeLUE.Properties.AutoExpandAllNodes = expand;
    // 多选
    if (isMulti)
    {
        treeLUE.Properties.TreeList.OptionsSelection.MultiSelect = true;
        treeLUE.Properties.TreeList.OptionsSelection.MultiSelectMode = TreeListMultiSelectMode.RowSelect;
        treeLUE.Properties.TreeList.OptionsView.CheckBoxStyle = DefaultNodeCheckBoxStyle.Check;
        var displayList = new List<string>();
        // Close关闭时获取多选的值
        treeLUE.CloseUp += (s, e) =>
        {
            displayList.Clear();
            valueList.Clear();
            var nodes = treeLUE.Properties.TreeList.GetAllCheckedNodes();
            foreach (var node in nodes)
            {
                displayList.Add(node.GetDisplayText(display));
                valueList.Add(node.GetDisplayText(value));// 也可以用:node.GetValue(value).ToString()
            }
            treeLUE.RefreshEditValue();
        };
        // DisplayText显示多选的值
        treeLUE.Properties.CustomDisplayText += (s, e) =>
        {
            if (!treeLUE.IsPopupOpen)
                e.DisplayText = string.Join(",", displayList.ToArray());
        };
    }
    return valueList;
}
SearchLookUpEdit封装方法
 /// <summary>
/// 绑定GridLookUpEdit
/// </summary>
/// <param name="slue">控件名称</param>
/// <param name="obj">数据源</param>
/// <param name="display">显示文本</param>
/// <param name="value">ValueMember值</param>
/// <param name="isMulti">多选</param>
public static List<string> SetSearchLookUpEdit(SearchLookUpEdit slue, object obj, string display, string value, bool isMulti = false)
{
    var valueList = new List<string>();
    // 绑定数据源
    slue.Properties.DataSource = obj;
    slue.Properties.DisplayMember = display;
    slue.Properties.ValueMember = value;
    // 其它属性设置
    slue.Properties.NullText = "";
    slue.Properties.View.RowHeight = 22; 
    slue.Properties.ImmediatePopup = true;
    slue.Properties.View.BestFitColumns();
    // 多选
    if (isMulti)
    {
        slue.Properties.View.OptionsSelection.MultiSelect = true;
        slue.Properties.View.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect;
        slue.Properties.View.OptionsSelection.CheckBoxSelectorColumnWidth = 40;
        var view = slue.Properties.PopupView as GridView;
        var displayList = new List<string>();
        slue.CloseUp += (s, e) =>
        {
            displayList.Clear();
            valueList.Clear();
            var rows = view.GetSelectedRows();
            foreach (var index in rows)
            {
                displayList.Add(view.GetRowCellValue(index, slue.Properties.DisplayMember).ToString());
                valueList.Add(view.GetRowCellValue(index, slue.Properties.ValueMember).ToString());
            }
            slue.RefreshEditValue();
        };
        slue.Properties.CustomDisplayText += (s, e) =>
        {
            if (!slue.IsPopupOpen)
                e.DisplayText = string.Join(",", displayList.ToArray());
        };
    }
    return valueList;
}

SearchLookUpEdit、GridLookUpEdit 方法相似,仅需替换控制即可。

简单说一下方法中返回选中节点ValueMember集合:

其实如果是单选,用EditValue便可获取到ValueMember的值,但是多选时由于用的是DisplayText显示,此时EditValue是空值,无法获取到ValueMember集合,于是以上方法中用valueList获取该集合。

此外,如果是编辑窗口中也有TreeListUpEdit控件,此时用treeListUpEdit1.Text也是无法直接取值父窗口中表单对应的值,为空值(这点不知道Dev为何这样设计),此时同用需要在CustomDisplayText中获取

// CustomDisplayTex
treeListLookUpEdit1.CustomDisplayText += (s, e) =>
 {
     e.DisplayText= supplier.gridView1.GetFocusedRowCellDisplayText("UserName").ToString();                                           
 };
// 加载上面事件后,Text才能获取到值
treeListLookUpEdit1.Text 返回父窗口中表单选中字段"UserName"的值

 

posted @ 2025-04-15 11:00  Luckyfish小文  阅读(160)  评论(0)    收藏  举报