zoukankan      html  css  js  c++  java
  • XtraEditors三、LookUpEdit、GridLookUpEdit、SearchLookUpEdit

    一、概述

    https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.LookUpEditBase.class

    1、层次结构

    LookUpEdit、GridLookUpEdit、SearchLookUpEdit、TimeZoneEdit,TreeListLookUpEdit都继承于PopBaseAutoSearchaEdit。

    都具有弹出框和搜索的功能。

    image

    二、LookUpEdit查找编辑器

    image

    1、绑定数据源:

    lookUpEdit1.
    Properties.ValueMember
     = "实际要用的字段";   //相当于editvalue
    lookUpEdit1.
    Properties.DisplayMember
     = "要显示的字段";    //相当于text
    lookUpEdit1.
    Properties.DataSource
     = "数据源";

    2、判断是否选择下拉框:

    if (this.lookUpEdit1.
    EditValue == null
     || this.lookUpEdit1.EditValue.ToString() == "nulltext")
    {
        //提示信息,说明未选择下拉框
    }

    3、设置或清空nulltext值: 

    lookUpEdit1.
    Properties.NullText
     = "请选择...";
    lookUpEdit1.Properties.NullText = null;//清空值

    4、使用LookUpEdit的值:

    string 变量1 = this.lookUpEdit1.
    EditValue
    .ToString(); //是lookUpEdit1.Properties.ValueMember值
    string 变量2 = this.lookUpEdit1.
    Text
    .Trim();    //是lookUpEdit1.Properties.DisplayMember 的值

    5、选择项

    lookUpEdit1.
    ItemIndex
     = 0;   //选择第一项
    lookUpEdit1.ItemIndex = -1;  //无选项,此时显示的是nulltext值。其实这个地方只要EditValue==null,lookUpEdit1就显示NullText
    lookUpEdit1.
    EditValue
     = value;//自动搜索DataSource,选择与之匹配的值,没有的情况下赋值null ,value的值必须与ValueMember的数据类型一致。

    6、弹出框及搜索模式:

    lookUpEdit1.Properties.ImmediatePopup = true; //在输入框按任一可见字符键时立即弹出下拉窗体。
    lookUpEdit1.Properties.AutoSearchColumnIndex = 0;// 设置自动搜索的栏位序号,下拉窗体第一个栏位为0,依此类推,此属性配合SearchMode = OnlyInPopup时有效。
    lookUpEdit1.Properties.SearchMode = DevExpress.XtraEditors.Controls.SearchMode.OnlyInPopup; //自动搜索定位模式

    7、SearchMode 搜索模式详解:

    1. OnlyInPopup :在下拉窗体能显示匹配结果(蓝底白字),但在输入框内不显示。
      配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并跟据输入的字符从头部开始匹配AutoSearchColumnIndex属性指定栏位字段的值,第一个栏位为0。贴图图片
    2. AutoComplete: 能在输入框显示匹配的数据,并且下拉窗体显示匹配的记录。
      配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并在输入框自动完成您想要输入的数据,同时下拉窗体自动匹配最佳记录。AutoComplete模式仅匹配DisplayMember对应字段的值。
      贴图图片
    3. AutoFilter(默认值):能在输入框显示匹配的数据,并过滤过不想要的记录。
      配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并在输入框自动完成您想要输入的数据,同时下拉窗体自动过滤掉不匹配的记录。
      贴图图片

    8、添加列

    添加显示的列:找到属性列表---添加要绑定的列。如果没有添加列 根据属性名称 自动生成列

    9、实例绑定方法

    DataSet ds;
    lookUpEdit1.Properties.DataSource = ds.Tables[0];
    lookUpEdit1.Properties.ValueMember = "daID";
    lookUpEdit1.Properties.DisplayMember = "xm";
    lookUpEdit1.EditValue = "5";
    
    
    //双击显示下拉列表
    lookUpEdit1.Properties.ShowDropDown = ShowDropDown.DoubleClick;
    lookUpEdit1.Properties.ImmediatePopup = true;//显示下拉列表
    lookUpEdit1.Properties.TextEditStyle = TextEditStyles.Standard;//允许输入
    lookUpEdit1.Properties.DropDownRows = 12;//默认显示的行数
    lookUpEdit1.Properties.NullText = "";//清空默认值
    
    //自动填充列
    lookUpEdit1.Properties.PopulateColumns();
    //或者添加列: 
    lookUpEdit1.Properties.Columns.Add(new LookUpColumnInfo("ProductClassID", 5, "类别代码"));
    
    //设置列属性
    //lookUpEdit1.Properties.Columns[0].Visible = false;
    lookUpEdit1.Properties.Columns[1].Caption = "姓名";
    lookUpEdit1.Properties.Columns[1].Width = 120;
    lookUpEdit1.Properties.Columns[0].FormatString = "000000";//列格式设置
    
    //下拉框自适应宽度
    lookUpEdit1.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
    lookUpEdit1.Properties.BestFit();
    //或者设置总宽度
    lookUpEdit1.Properties.PopupWidth = 500;
    
    //选择第一项
    lookUpEdit1.ItemIndex = 0;

    10、EditValueChanged值改变事件

    private void lookUpEdit1_EditValueChanged(object sender, EventArgs e)
    {
        //使用属性
        string daID = this.lookUpEdit1.EditValue.ToString();
        string xm = this.lookUpEdit1.Text.Trim();
    
        //使用方法
        DataRowView row = this.lookUpEdit1.GetSelectedDataRow() as DataRowView;//是lookUpEdit选择的整行的数据源,这里绑定的是DataTable
        //Order order  = this.lookUpEdit1.GetSelectedDataRow() as Order;
    
        if (row != null)
        {
            this.txt1.Text = row["ShortName"].ToString();
        }
    }

    11、处理字段名在数据源中找不到(未绑定列)GetNotInListValue事件

    private void LookUpEdit1_GetNotInListValue(object sender, GetNotInListValueEventArgs e)
    {
        e.Value = (e.RecordIndex + 1).ToString() + ".";
    }

    三、GridLookUpEdit

    imageimage

    1、显示行号

    private void gridLookUpEdit1View_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
     {
         if (e.Info.IsRowIndicator && e.RowHandle >= 0)
         {
             e.Info.DisplayText = (e.RowHandle + 1).ToString();
         }
     }

    2、设置根据多列筛选功能

    GridLoolUpEdit 默认  是根据 DisplayMember 绑定的字段  进行模糊筛选。

    private void gridLookUpEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
    {
        BeginInvoke(new MethodInvoker(delegate ()
        {
            GridLookUpEdit edit = sender as GridLookUpEdit;
            GridView gridView = edit.Properties.View as GridView;
            //获取GriView私有变量
            FieldInfo fi = gridView.GetType().GetField("extraFilter", BindingFlags.NonPublic | BindingFlags.Instance);
    
            List columnsOperators = new List();
            foreach (GridColumn col in gridView.VisibleColumns)
            {
                if (col.Visible && col.ColumnType == typeof(string))
                    columnsOperators.Add(new DevExpress.Data.Filtering.FunctionOperator(DevExpress.Data.Filtering.FunctionOperatorType.Contains,
                        new DevExpress.Data.Filtering.OperandProperty(col.FieldName), new DevExpress.Data.Filtering.OperandValue(edit.Text)));
            }
            string filterCondition = new GroupOperator(GroupOperatorType.Or, columnsOperators).ToString();
    
            //或者明确指定列
            //BinaryOperator op1 = new BinaryOperator("Id", "%" + edit.AutoSearchText + "%", BinaryOperatorType.Like);
            //BinaryOperator op2 = new BinaryOperator("Model", "%" + edit.AutoSearchText + "%", BinaryOperatorType.Like);
            //string filterCondition = new GroupOperator(GroupOperatorType.Or, new CriteriaOperator[] { op1, op2, op3 }).ToString();
    
            fi.SetValue(gridView, filterCondition);
            //获取GriView中处理列过滤的私有方法
            MethodInfo mi = gridView.GetType().GetMethod("ApplyColumnsFilterEx", BindingFlags.NonPublic | BindingFlags.Instance);
            mi.Invoke(gridView, null);
        }));
    }

    3、添加显示的数据列

    4、实例绑定方法

    //数据绑定
    DataSet ds;
    gridLookUpEdit1.Properties.DataSource = ds.Tables[0];
    gridLookUpEdit1.Properties.ValueMember = "daID";
    gridLookUpEdit1.Properties.DisplayMember = "xm";
    
    // 将EditValue绑定到“订单详情”表的ProductID字段;EditValue与ValueMember字段的值匹配。
    gridLookUpEdit1.DataBindings.Add("EditValue", dvMain, "ProductID");
    
    
    //双击显示下拉列表
    gridLookUpEdit1.Properties.ShowDropDown = ShowDropDown.DoubleClick;//双击显示下拉列表
    gridLookUpEdit1.Properties.ImmediatePopup = true;//显示下拉列表
    gridLookUpEdit1.Properties.AutoComplete = false;
    gridLookUpEdit1.Properties.TextEditStyle = TextEditStyles.Standard;//允许输入
    gridLookUpEdit1.Properties.NullText = "";//清空默认值
    gridLookUpEdit1.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
    gridLookUpEdit1.Properties.View.OptionsView.ShowAutoFilterRow = true;
    gridLookUpEdit1.Properties.PopupFilterMode = DevExpress.XtraEditors.PopupFilterMode.Contains;
    gridLookUpEdit1.Properties.ShowFooter = false;
    
    //自动填充列
    gridLookUpEdit1.Properties.View.OptionsBehavior.AutoPopulateColumns = false;
    //或者添加列: 
    gridLookUpEdit1.Properties.View.Columns.Add(new GridColumn { FieldName = "ProductClassID", VisibleIndex = 1, Caption = "类别代码", });
    
    
    //设置列属性
    //gridLookUpEdit1.Properties.View.Columns[0].Visible = false;
    gridLookUpEdit1.Properties.View.Columns[1].Caption = "姓名";
    gridLookUpEdit1.Properties.View.Columns[1].Width = 120;
    gridLookUpEdit1.Properties.View.Columns[0].DisplayFormat.FormatString = "000000";//列格式设置
    
    //下拉框自适应宽度
    gridLookUpEdit1.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
    gridLookUpEdit1.Properties.View.BestFitColumns();
    
    //或者设置总宽度
    gridLookUpEdit1.Properties.PopupFormWidth = 500;//或者设置总宽度
    
    //选择第一项
    gridLookUpEdit1.Properties.View.SelectRow(0);

    四、SearchLookUpEdit

    image

    1、添加显示的数据列

    在属性列表中 Properties  -> view  就可以打开设计器进行编辑

    2、实例绑定方法

    //数据绑定
    DataSet ds;
    searchLookUpEdit1.Properties.DataSource = ds.Tables[0];
    searchLookUpEdit1.Properties.ValueMember = "daID";
    searchLookUpEdit1.Properties.DisplayMember = "xm";
    
    // 将EditValue绑定到“订单详情”表的ProductID字段;EditValue与ValueMember字段的值匹配。
    searchLookUpEdit1.DataBindings.Add("EditValue", dvMain, "ProductID");
    
    
    //双击显示下拉列表
    searchLookUpEdit1.Properties.ShowDropDown = ShowDropDown.DoubleClick;//双击显示下拉列表
    searchLookUpEdit1.Properties.ImmediatePopup = true;//显示下拉列表
    searchLookUpEdit1.Properties.AutoComplete = false;
    searchLookUpEdit1.Properties.TextEditStyle = TextEditStyles.Standard;//能否够输入内容进行检索(还是仅仅能使用选择输入)                         
    searchLookUpEdit1.Properties.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center; //文本居中对齐
    //默认值
    searchLookUpEdit1.Properties.NullText = "------请选择------";
    searchLookUpEdit1.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True;
    //显示不显示grid上第一个空行,也是用于检索的应用
    searchLookUpEdit1.Properties.View.OptionsView.ShowAutoFilterRow = true;
    searchLookUpEdit1.Properties.PopupFilterMode = DevExpress.XtraEditors.PopupFilterMode.Contains;
    //是否显示底部
    searchLookUpEdit1.Properties.ShowFooter = false;
    
    //自动填充列
    searchLookUpEdit1.Properties.View.OptionsBehavior.AutoPopulateColumns = false;
    //或者添加列: 
    searchLookUpEdit1.Properties.View.Columns.Add(new GridColumn { FieldName = "ProductClassID", VisibleIndex = 1, Caption = "类别代码", });
    
    
    //设置列属性
    //lookUpEdit1.Properties.Columns[0].Visible = false;
    searchLookUpEdit1.Properties.View.Columns[1].Caption = "姓名";
    searchLookUpEdit1.Properties.View.Columns[1].Width = 120;
    searchLookUpEdit1.Properties.View.Columns[0].DisplayFormat.FormatString = "000000";//列格式设置
    
    //下拉框自适应宽度
    searchLookUpEdit1.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
    searchLookUpEdit1.Properties.View.BestFitColumns();
    
    //或者设置总宽度
    searchLookUpEdit1.Properties.PopupFormWidth = 500;//或者设置总宽度
    
    //选择第一项
    searchLookUpEdit1.Properties.View.SelectRow(0);
  • 相关阅读:
    Java Spring Boot VS .NetCore (十) Java Interceptor vs .NetCore Interceptor
    Java Spring Boot VS .NetCore (九) Spring Security vs .NetCore Security
    IdentityServer4 And AspNetCore.Identity Get AccessToken 问题
    Java Spring Boot VS .NetCore (八) Java 注解 vs .NetCore Attribute
    Java Spring Boot VS .NetCore (七) 配置文件
    Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml
    Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
    Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
    Java Spring Boot VS .NetCore (三)Ioc容器处理
    Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
  • 原文地址:https://www.cnblogs.com/springsnow/p/10191663.html
Copyright © 2011-2022 走看看