gpt4 book ai didi

c# - 使一些 DataGrid 单元格跨越多个列

转载 作者:太空狗 更新时间:2023-10-29 21:45:18 26 4
gpt4 key购买 nike

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

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

所以,由于我还没有发现任何关于 DataTable 的单元格跨越多列的信息(如果可以做到,知道如何做将是一件好事),我想我必须手动向 DataGrid 添加行,然后解决它是这样的:

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

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

最佳答案

所以在对所有这些进行了更多调整之后,我找到了一个非常好的解决方案。

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

编辑:应 Daniel 的要求,我添加了一些代码。

我们首先需要一个跨行模板:

<ControlTemplate TargetType='{x:Type DataGridRow}'
xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<Border>
<DataGridCellsPresenter Foreground='Black'>
<DataGridCellsPresenter.ItemsPanel>
<ItemsPanelTemplate>
<local:DataGridSpannedCellPanel />
</ItemsPanelTemplate>
</DataGridCellsPresenter.ItemsPanel>
</DataGridCellsPresenter>
</Border>
</ControlTemplate>

注意: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。

关于c# - 使一些 DataGrid 单元格跨越多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com