使一些 DataGrid 单元格跨越多列

2023-11-22

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

然而,我需要some行至仅包含一个单元格(您可以将其视为表内的“行组标题”)。

因此,由于我还没有找到任何关于 DataTable 跨越多列的单元格的信息(如果可以做到这一点,那么知道如何操作将是一件很棒的事情),我想我必须手动向 DataGrid 添加行,并解决类似的问题这:

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

第二点是我遇到问题的地方(如果是对的,那就是)。我需要add row到使用的 DataGrid作为单元格数据的简单字符串数组(数组中的索引应与单元格索引匹配)。有没有一种简单的方法可以做这样的事情?


因此,经过更多的摆弄之后,我找到了一个非常好的解决方案。

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

编辑:根据丹尼尔的要求,我添加了一些代码。

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

<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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使一些 DataGrid 单元格跨越多列 的相关文章

  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 当事件button.click发生时,如何获取按钮名称/标签?

    我以编程方式制作按钮并将它们添加到堆栈面板中 以便每次用户导航到页面时按钮都会发生变化 我正在尝试做这样的事情 当我单击创建的按钮时 它将获取按钮的标签并转到正确的页面 但是 我无法使用 RoutedEventHandler 访问按钮元素
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 带有移动向前/向后按钮的自定义列表框

    我有一个带有左 右重复按钮的自定义列表框 可以使用内容模板滚动其内容 如下所示
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • 比较:接口方法、虚方法、抽象方法

    它们各自的优点和缺点是什么 接口方法 虚拟方法 抽象方法 什么时候应该选择什么 做出这一决定时应牢记哪些要点 虚拟和抽象几乎是一样的 虚方法在基类中有一个实现 可以选择重写 而抽象方法则没有 并且must在子类中被覆盖 否则它们是相同的 在
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 在R中按时间范围合并两个数据帧

    我正在处理牛的繁殖力数据 在一个表 数据框 中 我记录了一头牛所执行的所有服务 例如授精 在另一个表中 我得到了妊娠诊断 阳性或阴性 两者都有一个唯一的 ID animal id 我的挑战是成功地将两个表合并到正确的数据范围内 这意味着我需
  • 有没有办法使用内存分配报告来分析 ruby​​ 1.9.2 脚本?

    我的 ruby 应用程序遇到了瓶颈 但我不知道它在哪里变慢 我找到了memprof 但它不支持1 9 我还发现 ruby prof 似乎在 1 9 2 上运行良好 但内存分配需要修补 ruby 解释器 并且我只能找到 ruby 1 8 的补
  • Spring多事务管理器、单事务

    我有一个复杂的情况 我必须使用 2 个不同的数据库 因此我使用 2 个不同的事务管理器 Spring中有没有办法将这些事务管理器链接到单个事务中工作 如果第二个数据源出现异常 第一个数据源的更改应该回滚
  • vue代理设置不起作用

    我有一个 Vue 项目 vue cli 3 x 我定义的代理package json基于本文不管用 目标服务器看不到 API 请求 我在这里缺少什么 vue 文件
  • xslt 仅在一个节点中将 \n 替换为

    嘿 我有一个节点 其中包含一条消息 例如 string1字符串2刺3 但是 当它渲染时 它会渲染所有一行 我如何将所有 n 替换为 s 我试过了 但我收到这个错误 加载样式表时出错 XSLT XPath 函数无效 我该怎么做呢 在您要处理的
  • Android使用buildozer编译错误

    我正在尝试编译一个 apk this one 使用构建器 但我不断收到下面的命令失败消息 我尝试过使用不同的 python 路径 重新安装 buildozer 使用不同的 buildozer 路径 从 Mac HD 编译 使用 sudo 编
  • Eigen - 将常量数组映射到动态向量

    我需要定义一个函数 它需要constC 数组并将其映射到Eigen地图 以下代码给我一个错误 double data 10 0 0 typedef Eigen Map
  • 在 WebView Google Tv 应用上处理方向键上的箭头键

    我已经构建了一个 Android 应用程序 它在 WebView 中加载 html 页面 并且工作正常 除了应该在方向键上发生的操作不起作用这一事实 如果我用其他键更改箭头的操作 它就会起作用 在 Web 浏览器中加载 html 页面工作正
  • 如何将 HTML 输入值数据类型更改为整数?

    我正在使用 jQuery 检索输入按钮提交的值 该值应该是一个整数 我想将其增加一并显示它 Getting immediate Voting Count down button id var countUp this closest li
  • Android 浏览器 - 当锚点聚焦时删除轮廓边框

    我在我的 Android 应用程序上使用一个加载外部页面的 webview 它有一些锚点 a 标签 当我按下它时 会出现黄色边框 我怎样才能防止它并删除这个边框 我尝试过以下技巧 jQuery a focus function this a
  • 在 Laravel 中创建可链接的方法

    我一直在尝试在 laravel eloquent 中创建自己的可链接方法 但我错过了一些东西 并且不确定什么 这听起来可能有点疯狂 但请看一下我下面的函数 以便更好地了解我想说的内容 class Post extends Eloquent
  • 寻找对我的线程安全、无锁队列实现的批评

    因此 经过一番研究后 我写了一个队列 它使用固定大小的缓冲区 因此它是一个循环队列 它必须是线程安全的 我已经尝试使其成为无锁的 我想知道它出了什么问题 因为这些事情我自己很难预测 这是标题 template
  • 如何从 jpeg 或 png 格式的字节数组在画布上绘制图像

    就像标题所说 我有一个表示图像内容的字节数组 可以是 jpeg 或 png 我想将其绘制在常规画布对象上
  • Application.Run() 和 Form.ShowDialog() 有什么区别?

    在我的应用程序中 我想首先显示登录表单 如果登录成功则显示主表单 目前我正在做这样的事情 var A new LoginForm if A ShowDialog DialogResult OK Application Run new Mai
  • Django 表单错误。没有任何 html 标签时出现错误

    我想在我的模板上获取非 html 版本的表单错误 默认情况下 错误被总结为 ul class errorlist 我想避免 无论如何 在不进行大量代码更改的情况下做到这一点 Django 1 7 中有两种新方法也可用于解决此问题 Form
  • 使用“__import__”从字符串变量导入模块给出的结果与普通导入语句不同

    我正在为嵌套 matplotlib MPL 库编写文档 个人 该库与 MPL 自己提供的文档不同 由感兴趣的子模块包提供 我正在编写 Python 脚本 希望能够在未来的 MPL 版本中自动生成文档 我选择了感兴趣的子模块 包 并希望列出它
  • 如何使用Java.sql.Connection.setNetworkTimeout?

    我遇到了 setNetworkTimeout 应该解决的确切问题Oracle 查询在 socket read 中卡住了几分钟 但我不知道这个方法的第一个参数需要是什么 提交 null 会导致 AbstractMethodError 异常 所
  • 将文本附加到输入字段

    我需要将一些文本附加到输入字段 input field id val input field id val more text
  • 每次运行应用程序时随机数生成器都会生成相同的数字[重复]

    这个问题在这里已经有答案了 我知道这个问题已经被多次提出 但这些解决方案都不适合我 首先我在我的方法中这样做了RandomNumGenerator items List
  • 使一些 DataGrid 单元格跨越多列

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