0

私の C# WPF アプリケーションでは、プログラムで ComboBoxColumn を DataGrid に追加します。

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表示されません。

例: myStatusStrListが含まれA, B, C、DataGrid の項目に がある場合XXComboBox にテキストとして表示されません。

どうすればこれを修正できますか?

前もって感謝します、クリスチャン

4

1 に答える 1

0

DataGridComboBoxColumnこのようなことを行うには動的ではありませんが、使用できますDataGridTemplateColumn。以下のコードは、必要な機能を実現するはずです。の にないアイテムを簡単に表示するCellTemplateを含む を使用して機能します。編集モードに入ると、リストのすべての項目を含む が表示されます。TextBlockItemsSourceComboBoxComboBox

        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;
于 2013-08-21T14:54:11.410 に答える