XtraEditors三、LookUpEdit、GridLookUpEdit、SearchLookUpEdit
0、概述
https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.LookUpEditBase.class
1、层次结构
LookUpEdit、GridLookUpEdit、SearchLookUpEdit、TimeZoneEdit,TreeListLookUpEdit都继承于PopBaseAutoSearchaEdit。
都具有弹出框和搜索的功能。
一、LookUpEdit查找编辑器
我觉得最简单,就像普通的 ComboBox 一样使用即可,将 SearchMode 设置为 AutoComplete ,配合 ImmediatePopup = true(用户输入字符立即弹出内容窗口,默认为false)和 SearchMode,即可化身成为专业软件界面。
个人感觉 SearchMode 设置为 AutoFilter 比较舒服,不但可以自动过滤不符合输入条件的项目,而且不会“阻塞”用户输入,比较自然符合习惯。
1、绑定数据源:
lookUpEdit1.Properties.ValueMember = "实际要用的字段"; //相当于editvalue lookUpEdit1.Properties.DisplayMember = "要显示的字段"; //相当于text lookUpEdit1.Properties.DataSource = "数据源";
2、添加列
添加显示的列:找到属性列表---添加要绑定的列。如果没有添加列,会根据属性名称自动生成列 。
3、弹出框及搜索模式:
lookUpEdit1.Properties.ImmediatePopup = true; //在输入框按任一可见字符键时立即弹出下拉窗体。 lookUpEdit1.Properties.AutoSearchColumnIndex = 0;// 设置自动搜索的栏位序号,下拉窗体第一个栏位为0,依此类推,此属性配合SearchMode = OnlyInPopup时有效。 lookUpEdit1.Properties.SearchMode = DevExpress.XtraEditors.Controls.SearchMode.OnlyInPopup; //自动搜索定位模式
SearchMode 搜索模式详解:
- AutoFilter(默认值):能在输入框显示匹配的数据,并过滤过不想要的记录。
配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并在输入框自动完成您想要输入的数据,同时下拉窗体自动过滤掉不匹配的记录。
- OnlyInPopup :在下拉窗体能显示匹配结果(蓝底白字),但在输入框内不显示。
配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并跟据输入的字符从头部开始匹配AutoSearchColumnIndex属性指定栏位字段的值,第一个栏位为0。 - AutoComplete: 能在输入框显示匹配的数据,并且下拉窗体显示匹配的记录。
配合ImmediatePopup=True时使用,当用户在输入框按任一可见字符键时立即弹出下拉窗体,并在输入框自动完成您想要输入的数据,同时下拉窗体自动匹配最佳记录。AutoComplete模式仅匹配DisplayMember对应字段的值。
4、判断是否选择下拉框:
if (this.lookUpEdit1.EditValue == null || this.lookUpEdit1.EditValue.ToString() == "nulltext") { //提示信息,说明未选择下拉框 }
5、设置或清空nulltext值:
lookUpEdit1.Properties.NullText = "请选择..."; lookUpEdit1.Properties.NullText = null;//清空值
6、使用LookUpEdit的值:
string 变量1 = this.lookUpEdit1.EditValue.ToString(); //是lookUpEdit1.Properties.ValueMember值 string 变量2 = this.lookUpEdit1.Text.Trim(); //是lookUpEdit1.Properties.DisplayMember 的值
7、选择项
lookUpEdit1.ItemIndex = 0; //选择第一项 lookUpEdit1.ItemIndex = -1; //无选项,此时显示的是nulltext值。其实这个地方只要EditValue==null,lookUpEdit1就显示NullText lookUpEdit1.EditValue = value;//自动搜索DataSource,选择与之匹配的值,没有的情况下赋值null ,value的值必须与ValueMember的数据类型一致。
8、实例绑定方法
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;
9、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(); } }
10、处理字段名在数据源中找不到(未绑定列)GetNotInListValue事件
private void LookUpEdit1_GetNotInListValue(object sender, GetNotInListValueEventArgs e) { e.Value = (e.RecordIndex + 1).ToString() + "."; }
二、SearchLookUpEdit
自带一个搜索框,内嵌Grid。
个人比较推荐,既能显示数据,又自带查找,个人工具也能瞬间高大上,为何不用。
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);
3、EditValueChanged
searchLookUpedit带有查询栏,在查询栏中输入关键字不会触发EditValueChanged,只有选择了数据过后才会触发这个事件。
每次选择数据过后,获取选择的数据
object mouldcode = lnpMouldCode.EditValue; if (mouldcode == null || mouldcode.ToString() == "") { return; }
通过SearchLookUpEdit中绑定的数据源获取我想要的数据:
MouldEntity mould = (this.bsMould.DataSource as List<MouldEntity>).SingleOrDefault(p => p.Code == mouldcode.ToString());
三、GridLookUpEdit
仅用来显示数据较少的二维表格,用它比较合适,因为看名字一目了然,就是个 Grid。
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);
四、TreeListLookUpEdit
以 TreeList 的样式显示数据,除非有树形数据,否则跟 GridLookUpEdit 一样
TreeListLookupEdit控件里面还是有一个TreeList控件的,这个控件的操作和我们上面说的TreeList控件操作完全一样,我们按树列表的方式初始化并绑定它即可。
posted on 2018-12-28 17:04 springsnow 阅读(4131) 评论(0) 编辑 收藏 举报