Skip to main content

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Bind Lookup to Dictionary

  • 4 minutes to read

A lookup editor can be bound to a Dictionary<TKey,TValue>. The lookup processes keys as values and values as display text. Do not specify the ValueMember and DisplayMember properties.

Note

TKey and TValue should be of the String type or a value type (for example, keys are integers, and values are strings).

using System.Collections.Generic;

// Creates the dictionary.
Dictionary<int, string> products = new Dictionary<int, string>();
products.Add(0, "Product A");
products.Add(1, "Product B");
products.Add(2, "Product C");
products.Add(3, "Product D");
// Binds the lookup to the dictionary.
lookUpEdit1.Properties.DataSource = products;

The animation below illustrates the result:

#Customize Lookup Columns

The lookup’s dropdown displays a column with display values. The lookup hides the column with values. The following code demonstrates how to display the column with values.

Bind to Dictionary and Customize Columns - WinForms Lookup

using System.Collections.Generic;

public Form1() {
    InitializeComponent();
    Dictionary<int, string> products = new Dictionary<int, string>();
    products.Add(0, "Product A");
    products.Add(1, "Product B");
    products.Add(2, "Product C");
    products.Add(3, "Product D");
    lookUpEdit2.Properties.DataSource = products;
    lookUpEdit2.Properties.ForceInitialize();
    lookUpEdit2.Properties.PopulateColumns();
    lookUpEdit2.Properties.Columns["Key"].Visible = true;
}

#Example

In this example, the Data Grid embeds a lookup editor to display and edit values in the Category ID column. The lookup is bound to a dictionary with category IDs and names.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors.Repository;

namespace LookUpEdit_Dictionary {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e) {
            // Binds the data grid to a data source.
            gridControl1.DataSource = new List<Product> {
                new Product(){ ProductName="Chang", CategoryID =  0  },
                new Product(){ ProductName="Ipoh Coffee", CategoryID =  0  },
                new Product(){ ProductName="Ravioli Angelo", CategoryID = 1  },
                new Product(){ ProductName="Filo Mix", CategoryID = 1  },
                new Product(){ ProductName="Tunnbröd", CategoryID  = 1  },
                new Product(){ ProductName="Konbu", CategoryID  = 2  },
                new Product(){ ProductName="Boston Crab Meat", CategoryID  = 2  }
            };
            // Creates and initializes a dictionary with categories.
            Dictionary<int, string> Categories = new Dictionary<int, string>();
            Categories.Add(0, "Beverages");
            Categories.Add(1, "Grains");
            Categories.Add(2, "Seafood");
            // Creates and initializes a lookup inplace editor (repository item).
            RepositoryItemLookUpEdit riLookUp = new RepositoryItemLookUpEdit();
            riLookUp.DataSource = Categories;
            riLookUp.PopulateColumns();
            riLookUp.Columns["Value"].Caption = "Name";
            // Embeds the lookup editor into the data grid.
            gridControl1.RepositoryItems.Add(riLookUp);
            gridView1.Columns["CategoryID"].ColumnEdit = riLookUp;
        }
    }

    public class Product {
        public int CategoryID { get; set; }
        public string ProductName { get; set; }
    }


}
See Also