使一些DataGrid单元格跨越多列

好的,我已经搜索了很长时间来解决这个问题。 我正在为WPF DataGrids开发简单的打印系统,并设法使用DataTable打印具有统一单元格位置的表格并将其设置为DataGrid的ItemSource。

但是,我需要一些只包含一个单元格 (您可以将其视为表格中的“行组标题”)。

所以,因为我还没有找到任何关于跨越多列的DataTable单元格(如果可以这样做,知道如何做是件好事),我想我必须手动向DataGrid添加行,并解决类似的问题。这个:

  • 使用所需的列创建新的DataGrid
  • 逐行添加行,设置跨越或不跨越行的DataGridCellPanel

第二点是我遇到问题的地方(如果是的话,就是这样)。 我需要向DataGrid 添加行 ,该DataGrid使用简单的字符串数组作为单元格数据 (数组中的索引应该是单元格索引)。 有没有一种简单的方法来做这样的事情?

所以在经过一番调整之后,我已经达成了一个非常好的解决方案。

最好和最简单的方法是在加载DataGrid后将数据模板应用于特定的行。 所以,我坚持使用DataTables的原创想法,并记住了需要更改模板的索引。 我刚刚从这些索引中获取DataGridRows并应用了具有跨多个列的自定义ItemsPanelTemplate的模板。

编辑:根据丹尼尔的要求,我包括一些代码。

我们需要的第一件事是跨越行的模板:

           

注意:local:DataGridSpannedCellPanel是一个自定义DataGridCellsPanel,具有重写的ArrangeOverride方法,使第一个单元格跨越整个大小。

例如,您可以在代码隐藏中创建一个字符串并从中加载模板。 接下来是使用这个新模板创建网格并初始化一些行:

 var newGrid = MakeNewDataGrid(); newGrid.ItemsSource = myTable.AsDataView(); var template = XamlReader.Parse(HeaderRowTemplate) as ControlTemplate; foreach (int index in myHeaderIndices) { var container = newGrid.ItemContainerGenerator.ContainerFromIndex(index); var row = container as DataGridRow; if (row != null) { row.Template = template; } } 

另请注意,表中的行需要按如下方式进行:

 if (bindableQuote.IsGroup()) { table.Rows.Add("Header"); } else table.Rows.Add(rowData.ToArray()); 

就是这样,唯一剩下的就是弄清楚如何实现DataGridSpannedCellPanel。