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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM