C#中的DataGridViews数组

Posted

技术标签:

【中文标题】C#中的DataGridViews数组【英文标题】:Array of DataGridViews in C# 【发布时间】:2015-06-12 18:41:02 【问题描述】:

我正在开发一个程序,该程序在多个选项卡控件上包含多个 DataGridView。我的 DataGridViews 在运行时对它们进行了很多初始格式化。例如,第 0 行和第 1 行是我的第一组“标题”,它们是具有颜色和字体格式的只读单元格。第 2 行和第 3 行用于数据输入,根据输入的值进行颜色编码。然后,这种行组织对第 4、5、6 和 7 行重复,然后,依此类推。

我不想为所有其他 DataGridView 重复所有设置和格式化代码。有没有办法创建一个 DataGridViews 数组,以便我可以循环设置和格式化代码?

DataGridView[] subFrames = new DataGridView[16];

上面可以编译,但是如何使用它呢?我无法在我的表单 subFrame[0] 上命名 DataGridView 控件。我是否必须在代码中创建控件并定义放置等才能做到这一点?还是有别的办法?

【问题讨论】:

您的DataGridViews 本身是静态的(而且数量众多),还是以某种方式动态生成? 程序初始化期间在运行时动态生成。我必须这样做来控制每一行的属性,因为有些行是只读的,而其他行不是。它们不受任何约束,仅包含用户输入。 在那种情况下,是什么产生了它们?大概该代码可以简单地将它们放在类级数组中,就像您在问题中显示的那样?是什么阻止了生成 DataGridView 的代码将该实例添加到数组中? 如果我理解正确,您是说将表单上的控件添加到我创建的数组中? subFrame[0] =
;或类似的东西?如果这让我可以从 subFrame[0] 操作表单控件实例,那就行了!
它应该可以工作,当然。除非代码中的其他地方有其他我们不知道的细节,自然而然。 DataGridView 实例是与 C# 中的任何其他对象一样的对象。您可以创建一个数组并将它们设置为该数组的元素以便快速访问它们。 【参考方案1】:

如果您正在动态生成DataGridViews,那么您可以完全使用您建议的方法。窗体上的控件实例是 C# 中的对象,与其他任何对象一样,因此您可以在数组中保存对这些对象的引用。

不太了解您的代码,这是一个人为的示例。但是考虑一下这种模式:

public class Form1

    private DataGridView[] subFrames = new DataGridView[16];

    // other code

    private void BuildGrids()
    
        this.DataGridView1 = BuildFirstGrid();
        subFrames[0] = this.DataGridView1;
        // continue for the rest of the grids
    

    private void StyleGrids()
    
        foreach (var grid in subFrames)
            ApplyStyling(grid);
    

您希望针对此特定问题整合的代码位于 ApplyStyling() 中,基本上按照您的描述转换每个网格。

【讨论】:

以上是关于C#中的DataGridViews数组的主要内容,如果未能解决你的问题,请参考以下文章

DataGridView 上的 Foreach 循环中的其他条件不起作用

如何跨应用程序在多个 Datagridviews 之间共享 DataTable 并节省宝贵的内存

C# 如何使datagridview中的单元格处于可编辑

C# excel文件导入导出

如何找出点击了哪个 DataGridView?

C# SQL Row 删除带有子行的父级