【问题标题】:Devexpress LookUpEdit - serach second column by value meberDevexpress LookUpEdit - 按值成员搜索第二列
【发布时间】:2015-02-21 18:39:10
【问题描述】:

我想知道可以按与 ValueMember 值对应的列过滤 **LookUpEdit ** 下拉列表。

        LookUpEdit.DataSource = ds.Tables(0)
        LookUpEdit.ValueMember = ds.Tables(0).Columns("VALUE").Caption.ToString
        LookUpEdit.DisplayMember = ds.Tables(0).Columns("DISPLAYtext").Caption.ToString
        LookUpEdit.View.FocusedRowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle
        LookUpEdit.AllowFocused = True
        LookUpEdit.CloseUpKey = New KeyShortcut(Keys.Add)
        LookUpEdit.NullText = ""

我使用的是 devexpress 14.2.3。和 vb.net

【问题讨论】:

    标签: vb.net devexpress


    【解决方案1】:

    您可以在 LookUpEdit 中另外显示“VALUE”列,以便您进行搜索。 或者你可以覆盖搜索机制。

    编辑: 我认为缓解方式是显示值列,如下所示:

    <dxg:LookUpEdit AutoPopulateColumns="False" ValueMember="VALUE" DisplayMember="DISPLAYtext">
    <dxg:LookUpEdit.StyleSettings>
    <dxg:SearchLookUpEditStyleSettings/>
    </dxg:LookUpEdit.StyleSettings>
    <dxg:LookUpEdit.PopupContentTemplate>
    <ControlTemplate>
    <dxg:GridControl AutoGenerateColumns="None" Name="PART_GridControl">
    <dxg:GridControl.Columns>
    <dxg:GridColumn FieldName="Value"/>
    <dxg:GridColumn FieldName="DISPLAYtext"/>
    </dxg:GridControl.Columns>
    <dxg:GridControl.View>
    <dxg:TableView NavigationStyle="Row" ShowGroupPanel="False" ShowTotalSummary="False" AutoWidth="True"/>
    </dxg:GridControl.View>
    </dxg:GridControl>
    </ControlTemplate>
    </dxg:LookUpEdit.PopupContentTemplate>
    </dxg:LookUpEdit>
    

    因此,您也可以覆盖 LookUpEdit。对不起,我不知道它是如何正确写在 VB 上的,但想法类似:

    public class MyLookUpEdit : LookUpEdit
    {
        public MyLookUpEdit()
        {
            currentItems = new List<TestDataItem>();
        }
    
        private List<TestDataItem> currentItems;
    
        protected override void OnDisplayTextChanged(string displayText)
        {
            base.OnDisplayTextChanged(displayText);
            this.currentItems.Clear();
            var filter = (displayText).ToLower();
            foreach (var item in ((IEnumerable<TestDataItem>) this.ItemsSource).Where(x => this.Filter(x, filter)))
            {
                this.currentItems.Add(item);
            }
            currentItems.Sort(new Comparison<TestDataItem>((el1, el2) =>
            {
                int elt1 = CompareStrings(el1.Value, filter);
                int elt2 = CompareStrings(el2.Value, filter);
                return elt2 - elt1;
            }));
            if (GetGridControl() != null)
            {
                GetGridControl().ItemsSource = currentItems;
                Dispatcher.BeginInvoke((Action) (GetGridControl().RefreshData));
            }
        }
    
        private bool Filter(TestDataItem item, string filter)
        {
            if (filter.Length < 2) return false;
            int res = CompareStrings(item.Value, filter);
            if (res > 1) return true;
            /**/
            return false;
        }
    
        public int CompareStrings(string str1, string str2)
        {
            int res = 0;
            if (str1 == str2) return 2;
            /**/
            return res == 0 ? 1 : res;
        }
    }
    

    或覆盖 LookUpEdit 中的 OnAutoSearchTextChanged

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2011-01-13
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多