文字列を含む各列の各セルに編集可能なComboBoxを配置する自動生成GridViewを作成しようとしています。各列の選択可能な項目は、DataTableのその列に既にある値と一致する必要があります。以下のコードはほぼ達成されていますが、なんらかの理由で、すべての列のドロップダウンリストに、最後の列のドロップダウンリストが表示されます。AutoGeneratingColumnはすべてのドロップダウンリストを最終列のもので埋めるのはなぜですか?
private void dataGrid_AutoGeneratingColumn(object sender,
DataGridAutoGeneratingColumnEventArgs e) {
if (e.PropertyType == typeof(string)) {
DataGridTemplateColumn comboColumn = new DataGridTemplateColumn();
comboColumn.Header = e.PropertyName;
comboColumn.CellTemplate = (DataTemplate)Resources["ComboBoxDataTemplate"];
FrameworkElementFactory comboBoxFactory = new FrameworkElementFactory(typeof(ComboBox));
List<string> list = (DataContext as MainVM).PartClassVM.DataTable.AsEnumerable()
.Select(row => row[e.PropertyName].ToString()).Distinct().ToList<string>();
comboBoxFactory.SetValue(ComboBox.ItemsSourceProperty, list);
comboColumn.CellTemplate.VisualTree = comboBoxFactory;
e.Column = comboColumn;
}
}
誰にもこれが起こっている理由とその回避方法を説明できますか?前もって感謝します。
列A、B、C、DのComboBoxのItemsSourceが列Eの選択可能なオプションのリストにバインドするように見える理由はまだ分かりません。ColumnTypeがstring型に設定されているためです。それは本当に私のためにそれを説明していない。それを拡大してください。 – christiaantober
私が正しく理解していれば、すべての 'DataGridColumns'に' ComboBox'es'がありますか?しかし、 'DataGridColumn'の型が' string'の場合にのみ 'ComboBox'を' DataGridColumn'に表示したいですか?もしそうであれば、 'DataGridColumn's'は全て' string'型です。私があなたに誤解しているかどうかを明確にしてください。 – StepUp
私はすべてのDataGridColumnsにComboBoxesを持っています。それが私の希望です。しかし、すべてのComboBox Columnが提供する選択可能なオプションは現在{"LH1"、 "LH2"、 "RH1"、 "RH2"}です。これは最後の列には正しいが、他の列には正しくない。他の列には、文字列の異なるリストが含まれている必要があります。 – christiaantober