2013-02-07 92 views
2

我试图创建一个DataGrid,其中有下拉菜单的标题,我不知道如何去做。自定义的WPF DataGrid与标题中的下拉菜单

数据网格本身是从它可以有许多不同的格式,所以我不能预先定义XAML列CSV文件填充,而不是将它们像:

//add headers as columns on the data grid 
var headerRow = _inputFile.GetHeaderRow(); 
foreach (var hr in headerRow) 
{ 
     var textColumn = new DataGridTextColumn(); 
     textColumn.Header = hr; 
     SourceGrid.Columns.Add(textColumn); 
} 

我的目标是要还在标题列中有下拉菜单(或者第一行是否适合样式),因为我的想法是将输入的CSV文件映射到一组预定义的输出,所以我希望用户为每个输入选择一个文件标题通过下拉菜单将其映射到什么地方。

尝试在xaml中定义数据网格模板会更好吗?或者,也许可以将我的输入数据安排到一个类结构中,这样可以更轻松地以我想要的方式将数据绑定到网格上?还是其他什么东西?

我对WPF相当陌生,并且很难找到从这里出发的地方,所以即使是在正确方向的指针也会非常有帮助!


编辑:

var comboColumn = new DataGridComboBoxColumn(); 
comboColumn.Header = new ComboBox(); 
SourceGrid.Columns.Add(comboColumn); 

所以我知道我可以设置标题是在代码中的文本或组合框,但有把两者在同一列标题文本和组合框的方式? 另外,我的方法是解决这个问题,或者我应该寻找一种不同的控制方式?或者可能使用数据绑定而不是在代码中设置值?

+0

你明白了吗?我试图实现相同的事情,目前正在努力与绑定组合框选择 – RyanS

+0

@RyanS害怕不是。如果你想出了一个解决方案,请在这里发布它,让其他人可以看到它:) – peacemaker

+0

我得到了组合框中的组合框,但没有找到一个优雅的方式来绑定他们的动态数量。我最终找到了一种替代方法来完成我所需的工作 – RyanS

回答

1

以下代码将帮助您在wpf中显示Combobox标头。

<DataGridTextColumn Binding="{Binding FirstName}"> 
    <DataGridTextColumn.Header> 
     <ComboBox /> 
    </DataGridTextColumn.Header> 
    </DataGridTextColumn> 
+0

由于用于定义这些头文件的CSV文件的自定义格式,我必须在代码中设置头文件。我如何才能实现您的XAML所做的,但在代码中? – peacemaker

+0

@peacemaker下面是你如何在代码中执行它:myDataGrid.Columns.Add(new DataGridTextColumn {Header = new ComboBox(),Binding = myBinding}); – Eirik

+0

使用Eirik建议的解决方案。它会帮助你把它整理出来。 – Smaug