1

I am trying to create and add a column to DataGridControl (Xceed Community Edition) in run-time via code-behind. The column includes CombobBox as DataTemplate. Here is what I have now:

            CellEditor editor = new CellEditor();
            DataTemplate editTemplate = editor.EditTemplate = new DataTemplate();
            FrameworkElementFactory templateCbox = new FrameworkElementFactory(typeof(ComboBox)) { Name = "cmbMain" };
            templateCbox.SetBinding(ComboBox.SelectedValuePathProperty, new Binding("CountryID"));
            templateCbox.SetBinding(ComboBox.DisplayMemberPathProperty, new Binding("Name"));
            templateCbox.SetBinding(ComboBox.ItemsSourceProperty, new Binding("DataContext.Country") { RelativeSource = new RelativeSource() { AncestorType = typeof(Window) } });
            templateCbox.SetBinding(ComboBox.SelectedValueProperty, new CellEditorContext());
            editTemplate.VisualTree = templateCbox;
            Column clmAdditional = new Column() { FieldName = "CountryID", CellEditorDisplayConditions = CellEditorDisplayConditions.Always };
            clmAdditional.CellEditor = editor;
            _dgvMain.Columns.Add(clmAdditional);

The ViewModel contains two DataTables:

public class ViewMode
{
    public DataTable Address { get; set; }
    public DataTable Country { get; set; }

    public ViewMode()
    {
        Address = new DataTable();
        Address.Columns.Add("HouseNumberAdd", typeof(string));
        Address.Columns.Add("City", typeof(string));
        Address.Columns.Add("Date", typeof(DateTime));
        Address.Columns.Add("Used", typeof(bool));
        Address.Columns.Add("CountryID", typeof(int));

        Address.Rows.Add("Random Address 1", "Krakov", DateTime.Now, true, 1);
        Address.Rows.Add("Random Address 2", "Kharkiv", DateTime.Now, true, 2);
        Address.Rows.Add("Random Address 3", "Moscow", DateTime.Now, false, 3);
        Address.Rows.Add("Random Address 4", "Santiago", DateTime.Now, true, 1);

        Country = new DataTable("Country");
        Country.Columns.Add("Name", typeof(string));
        Country.Columns.Add("CountryID", typeof(int));

        Country.Rows.Add("America", 1);
        Country.Rows.Add("Zimbabve", 2);
        Country.Rows.Add("Cayman", 3);
    }
}

Now, I can't fined how to set binding to ComboBox.SelectedValueProperty as to {xcdg:CellEditorBinding}, since CellEditorBinding is not found in the assembly. How can I do that?

v.chjen
  • 615
  • 1
  • 8
  • 20

1 Answers1

0

I found the following code snippet in a previous support ticket for a similar request.

Binding bin = new Binding();
bin.Mode = BindingMode.TwoWay;
bin.Path = new PropertyPath("(0).(1)", Cell.ParentCellProperty, Cell.ContentProperty);
bin.RelativeSource = RelativeSource.Self;

FrameworkElementFactory factory = new FrameworkElementFactory(typeof(ComboBox));
factory.SetValue(ComboBox.SelectedValueProperty, bin);

If this code doesn't work in your case and you need more help, you can send us an email at support@xceed.com

Diane-Xceed
  • 319
  • 1
  • 6