【问题标题】:ListView / DataGridView move columns to the leftListView / DataGridView 将列向左移动
【发布时间】:2015-05-19 18:00:40
【问题描述】:

使用ListViewDataGridView 我想将列标题移动到控件的左侧。基本上,将列的位置与行交换。我正在构建一个信息小程序,它将具有数十个具有单个值的列名。

在这个例子中,我刚刚创建了第一列作为标题的行。

【问题讨论】:

  • 您的意思是旋转网格吗?当前行变成列,当前列变成行?您希望这是该网格的永久行为还是要使其动态化?
  • @cdkMoose 我认为 pivot 将是一个合适的术语来描述我正在尝试做的事情,所以是的。是的,我希望这是一种永久的行为。

标签: c# winforms listview datagridview


【解决方案1】:

如果您想透视您的数据,您可以通过两种方式实现,这取决于您要修改的内容。

如果数据在数据库中,您可以根据需要显示为行的列数使用动态构建的 Pivot 查询。查询可以在 SQL Server 中使用 PIVOT 或 CASE 语句完成。

如果动态构建查询结果过于复杂,您可以按原样获取表并以列作为属性构建一个类,并创建一个读取表行的集合并为您拥有的每一列创建一个对象旋转。

如果您决定这样做,请记住在类中实现 INotifyPropertyChanged,如果您想从代码更改表单中的数据并查看网格中的修改,请为类使用 BindingList 而不是 List。

【讨论】:

  • 数据不会来自数据库。如果我要执行您的第二个建议,那就是像我的示例中那样移动数据,对吗?如果是这样,我想避免这种情况。
【解决方案2】:

这很难,因为 datagridview 根本没有为此提供任何帮助。但是,当您想要显示具有大量属性的少量对象时,该模型会非常方便。

Sabrina_cs 上面的答案将处理在透视视图中显示数据的简单情况。但是,您将失去各种 DataGridViewxxxColumn 类提供的所有增强编辑功能。这可以解决,但您必须自己开课才能到达那里。

我过去建立了一个类来以一种通用的方式解决这个问题。我不能分享代码,因为我是为了工作才这样做的,但我可以为你描述解决方案。

First 是一个基于 xml 的配置文件,用于定义将映射到属性的行集。在我们的例子中,这个配置文件包括顺序、属性名称、数据类型、查找引用、表示(复选框、组合框等)、标题文本、只读状态以及您认为可能需要的任何其他内容。

在表单初始化时,您将使用此配置文件在网格中生成行并将定义绑定到该行以供您的代码稍后参考。

当您加载数据时,您需要自己将值绑定到单元格,因为内置绑定不适合您。如果您为文本之外的数据实现特殊控件,则需要在初始化行或绑定实际数据时手动将正确的控件绑定到单元格。我们将它用于布尔值 -> 复选框和查找 -> 组合框。

在编辑数据时,您将负责更新自己的基础数据对象,您可能希望在加载数据时将其关联到列。您可以根据配置文件中的信息使用反射来更新属性。

我知道这不是很多细节,但希望这将提供足够的背景知识,让您了解如何进行,或者是否值得付出努力。根据您尝试提供的丰富体验,这可能很容易达到 1000 多行代码,因此这不是微不足道的。

对于我们尝试处理的数据集,我们的用户发现此演示文稿是一项非常有价值的改进。 YMMV。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多