在我的C# WPF应用程序中,我以编程方式向DataGrid添加了一个ComboBoxColumn:
public static DataGridComboBoxColumn getCboCol(string colName, Binding textBinding)
{
List<string> statusItemsList = new StatusStrList();
DataGridComboBoxColumn cboColumn = new DataGridComboBoxColumn();
cboColumn.Header = colName;
cboColumn.SelectedItemBinding = textBinding;
cboColumn.ItemsSource = statusItemsList;
return cboColumn;
}如果包含的DataGrid中的项包含文本,而我的StatusStrList不包含文本,则不会显示它。
示例:如果我的StatusStrList包含A, B, C,而DataGrid的项包含X,则X将不会显示为ComboBox中的文本。
,我怎样才能解决这个问题?
提前谢谢你,克里斯蒂安
发布于 2013-08-21 14:54:11
DataGridComboBoxColumn没有足够的动态来做这样的事情,但是您可以使用DataGridTemplateColumn。下面的代码应该可以实现所需的功能。它通过使用包含一个CellTemplate的TextBlock来工作,该TextBlock很容易地显示不在ComboBox的ItemsSource中的项。进入编辑模式将显示包含列表中所有项的ComboBox。
DataGridTemplateColumn cboColumn = new DataGridTemplateColumn();
cboColumn.Header = colName;
//DataTemplate for CellTemplate
DataTemplate cellTemplate = new DataTemplate();
FrameworkElementFactory txtBlkFactory = new FrameworkElementFactory(typeof(TextBlock));
txtBlkFactory.SetValue(TextBlock.TextProperty, textBinding);
cellTemplate.VisualTree = txtBlkFactory;
cboColumn.CellTemplate = cellTemplate;
//DataTemplate for CellEditingTemplate
DataTemplate editTemplate = new DataTemplate();
FrameworkElementFactory cboFactory = new FrameworkElementFactory(typeof(ComboBox));
cboFactory.SetValue(ComboBox.TextProperty, textBinding);
cboFactory.SetValue(ComboBox.ItemsSourceProperty, statusItemsList);
cboFactory.SetValue(ComboBox.IsEditableProperty, true);
MouseEventHandler handler = new MouseEventHandler(delegate(object sender, MouseEventArgs args)
{
ComboBox cboBox = (ComboBox)sender;
cboBox.IsDropDownOpen = true;
});
cboFactory.AddHandler(ComboBox.MouseEnterEvent, handler);
editTemplate.VisualTree = cboFactory;
cboColumn.CellEditingTemplate = editTemplate;https://stackoverflow.com/questions/18351849
复制相似问题