We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

How to bind different ItemsSources to each row of the ComboBox by using GridTemplateColumn in the SfDataGrid?

Platform: WPF |
Control: SfDataGrid |
.NET Framework: 4.5.1 |
Product Version:

In the SfDataGrid, by default the ComboBox is loaded while editing the cell values of the GridComboBoxColumn. It lists out the initially populated values that are bound to the ItemsSource property of the GridComboBoxColumn. The same ItemsSource is loaded to each cell of the GridComboBoxColumn. Since the ItemsSource is a single instance of the GridComboBoxColumn, you cannot load different ItemsSources to each cell while editing it.

To overcome this, you can use the GridTemplateColumn to create your own cell types. By specifying the CellTemplate and EditTemplate, you can customize the content in both displays and edit with the GridTemplateColumn. You can load any control in both Cell Template and Edit Template of the GridTemplateColumn.

Similarly, you can load the ComboBox in EditTemplate of the GridTemplateColumn and it creates a new ComboBox instance while editing the GridCell. Here, you can bind different ItemsSources to each row of the ComboBox as illustrated in following code example.


<syncfusion:GridTemplateColumn MappingName="ShipCity" 
                               HeaderText="Ship City List" 
    <!--TextBlock loaded in Display mode-->
            <TextBlock Text="{Binding ShipCity}" />
    <!--ComboBox loaded in Edit mode-->
            <ComboBox SelectedItem="{Binding ShipCity}"  
                      ItemsSource="{Binding CountryName, Converter={StaticResource converter}}"/>

The ItemsSource for each row of the ComboBox is set based on the Country Name with the help of converter as illustrated in the following code example.


public class ItemsSourceConverter:IValueConverter
    ShipCityDetailsRepository ShipCity = new ShipCityDetailsRepository();
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        string[] shipcities=null;
        // Checks whether the ShipCity dictionary key contains the country that is received from the value parameter.
        if (ShipCity.ContainsKey(value.ToString()))
            //When the key matches, it returns the corresponding shipcities.
            ShipCity.TryGetValue(value.ToString(), out shipcities);
            return shipcities;
        return null;
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        throw new NotImplementedException();

The following screenshot illustrates the different ShipCity ItemsSources bound to each row of the ComboBox based on the Country Name in the GridTemplateColumn.

ShipCity list of Argentina in SfDataGrid

Figure 1: ShipCity list of Argentina

ShipCity list of Brazil in SfDataGrid

Figure 2: Ship city list of Brazil

Sample Links:




2X faster development

The ultimate WPF UI toolkit to boost your development speed.
You must log in to leave a comment

Please sign in to access our KB

This page will automatically be redirected to the sign-in page in 10 seconds.

Up arrow icon

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile