使一些DataGrid单元格跨越多列。

好了,为了解决这个问题,我已经找了很久了。我正在为WPF DataGrids开发简单的打印系统,并且已经成功地使用DataTable打印了具有统一单元格位置的表格,并将其设置为DataGrid的ItemSource。

然而,我需要 一些 行数 只有一个单元格 你可以把它想象成表里面的 “行组头”)。

所以,由于我没有找到任何关于DataTable的单元格跨越多列的东西(如果可以做出来,知道怎么做就好了),我想我必须手动给DataGrid添加行,解决方法是这样的。

  • 在新的DataGrid中加入所需的列
  • 逐一添加行,设置跨行或不跨行的DataGridCellPanel。

第二点是我的问题所在(如果是对的,那就是)。我需要 加行 到一个使用 简单的字符串数组作为单元格数据 (数组中的索引应该是单元格的索引)。有什么简单的方法可以做到这样吗?

解决方案:

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

最好的也是最简单的办法就是在DataGrid加载后,对特定的行应用数据模板。于是,我坚持原来的想法,用DataTables记住了需要改变其模板的索引。我只是从这些索引中取出DataGridRows,然后应用了自定义制作的ItemsPanelTemplate的模板,该模板横跨多列。

EDIT:应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.

给TA打赏
共{{data.count}}人
人已打赏
未分类

EXT JS 5.0.1中如何自动调整组合框的大小?

2022-9-8 23:28:40

未分类

连接表格,按日期查询,按字段汇总和按组查询

2022-9-8 23:39:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索