[英]Adding a column to DataGridControl from code-behind
I am trying to create and add a column to DataGridControl (Xceed Community Edition) in run-time via code-behind. 我试图通过代码隐藏在运行时创建并添加一个列到DataGridControl(Xceed Community Edition)。 The column includes CombobBox as DataTemplate.
该列包括CombobBox作为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: ViewModel包含两个DataTable:
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. 现在,我
{xcdg:CellEditorBinding}
如何设置与{xcdg:CellEditorBinding}
ComboBox.SelectedValueProperty
绑定,因为在程序集中找不到CellEditorBinding
。 How can I do that? 我怎样才能做到这一点?
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 如果此代码在您的情况下不起作用并且您需要更多帮助,可以发送电子邮件至support@xceed.com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.