문자열을 포함하는 각 열의 각 셀에 편집 가능한 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'에 표시하고 싶습니까? 그렇다면, 모든 DataGridColumns가'string' 타입이기 때문에 발생합니다. 내가 너를 잘못 이해했는지 확인해 줘. – StepUp
모든 DataGridColumns에 ComboBoxes가 있는데 원하는 것입니다. 그러나 모든 ComboBox Column이 제공하는 선택 가능한 옵션은 현재 { "LH1", "LH2", "RH1", "RH2"}입니다. 이는 최종 열에 대해서는 맞지만 다른 열에 대해서는 맞지 않습니다. 다른 열은 서로 다른 문자열 목록을 가져야합니다. – christiaantober