问题标签 [datagridviewrow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
131 浏览

c# - 将 dataGridViewRows 列表添加到 DataGridView

我有一个这样的 DataGridViewRows 列表

List DataGridViewRows list = new List DataGridViewRows ();

我想将它添加到我的 dataGridView 并显示它。

很抱歉在声明列表中缺少 <>,我是 StackOverFlow 的新手。

谢谢你的帮助。

0 投票
0 回答
127 浏览

c# - '当控件绑定数据时,不能以编程方式将行添加到 DataGridView 的行集合中。

我想获取用户关于他/她想要多少行的输入,然后将该行数添加到 datagridview,而 datagridview 正在填充它的数据。这样就会发生异常,System.InvalidOperationException。有解决办法吗?

0 投票
2 回答
206 浏览

c# - 为什么我没有在 C# winForms 应用程序中获取 datagridview 可编辑列的最后一行的值?

我创建了具有 datagridview 控件的用户控件。并且 datagridview 正在从文本文件中获取数据以动态创建行和列。我将该用户控件添加到面板。dgv 的一列是可编辑的。我想要列表中的可编辑列值。我得到了除最后一行值之外的所有值。

我的用户界面

主窗体代码

用户控件的代码

当我阅读“SrNo”列而不是“Observed(Sec)”列时,我从 SrNo 列中获得了所有值。那为什么我无法阅读可编辑的“已观察(秒)”列?

我无法理解我错过了什么。请帮我解决这个问题。提前致谢!!

0 投票
3 回答
1000 浏览

c# - 无法更改 DataGridView 单元格的背景颜色

我正在尝试遍历 datagridview 中的行并根据其存储的值更改单个单元格的颜色。

我已经尝试了以下两种方法,但都没有工作,也没有抛出异常。

1:

2:

3(自写此问题以来的另一次尝试,也不起作用):

任何帮助表示赞赏。

0 投票
2 回答
35 浏览

c# - Datagridview到数组缺少一行

我有DataGridView一个CheckBox第一列。

我使用以下 Linq 来获取所有选中的行。

但不知何故,结果总是缺少最后检查的行!!!

但是,如果我选择另一个卷(不检查它),在我运行该行之前,最后一行出现了!!!

有人可以这么好心告诉我我哪里做错了吗!?

非常感激!!!

0 投票
1 回答
1234 浏览

c# - 如何替换 DataGridView 中的整行值?

是否可以在一行代码中替换整个 DataGridViewRow 值?

我不想像这样替换:

0 投票
1 回答
79 浏览

vb.net - 使用VB隐藏DataGridView中的所有行

我正在尝试过滤 DataGridView 中的数据,我需要隐藏所有行和列。我尝试使用循环列表 LINQ 和 lambda 表达式来执行此操作,因为如果我使用 foreach 尝试过滤 3000 行时会很慢。

以下代码执行没有错误并且在 c# 中完美运行,但不隐藏 vb 中的行:

c#完美运行

vb 不起作用不隐藏行

当我通过 Sub 更改功能时向我发送错误

我正在寻找与 vb 等效的代码 C# 或等效的操作。

0 投票
1 回答
393 浏览

c# - 使用 DataGridView 的 RowPrePaint 事件时,行被渲染两次

我尝试使用 DataGridView 的 RowPrePaint 事件有条件地设置行的 BackColor。当我启动我的应用程序时,行已正确呈现,但存在行被呈现两次的问题。

我正在使用 Windows 窗体构建应用程序。

0 投票
0 回答
223 浏览

c# - .Net DataGridView Rows.Add 和 Rows.AddRange 与自定义 DataGridViewRow 的区别

今天这种奇怪的行为让DataGridViewControl我花了相当多的时间。

TL;DR :向 DGVRows.Add(MyOwnFancyRow)添加一个克隆,同时添加自身。写完后想通了,但还是不明白为什么MyOwnFancyRowRows.AddRange(new MWERow[]{MyOwnFancyRow})MyOwnFancyRow

假设: DataGridView.Rows.Add()DataGridView.Rows.AddRange()根据RowTemplate不同的方式处理新行的插入。

实验:我使用unbound DataGridView s,旨在显示复杂的类,并为用户提供配置此类实例的方法以满足他们的口味。我可能会从 XML 加载一些实例并显示它们,并让用户有机会添加新实例(想想dgv.AllowUserToAddRows = true;

为了处理这些实例的正确显示,我创建了 customDataGridViewRow来处理用户和实例之间的所有交互。通过这种方式,我可以将我的实例DataGridView以完全不同的形式插入另一个实例,而无需复制所有处理代码。该行为我完成了这一切。

对于我的最小(非)工作示例,请考虑这个不太复杂的类:

这个类本身不能舒适地进入 a DataGridView,所以这里是DataGridViewRow处理显示和更新的自定义(我试图让它尽可能完整但简短,所以概念变得清晰,我可以指出错误):

这一行背后的概念如下:

  • 静态方法允许我设置任何DataGridView我想要的
  • DataGridView分配了特定的事件处理程序来处理添加行和编辑单元格 => 这使我的表单代码保持干净,并且我有办法在添加行后显示正确的值
  • 列被添加到DataGridView
  • 设置为最基本的CellTemplate行 => 使用默认值实例化对象的行(在“添加新行”-行中显示值,默认值总是很好)
  • 请注意克隆方法(根据文档必须存在)。我们将在短时间内移动评论。

Row 本身首先创建它需要的单元格 ( CreateCells(templateDGV);),这就是我必须提供指向 DataGridView 的链接的原因,该行将被添加到 => 我需要列名。

最重要的是,我们需要一个DataGridView名为 dgv 和 6 Buttons 的表格,所以这里是:

按钮功能的简短描述:

  • 一键设置 DataGridView
  • 一键显示:所有行中的“theObject”、“theObjects”-List 的内容(固定)和“theSecondObjects”-List 的内容(随着每次添加而增长)
  • 一键将新行实例一一添加到 DGV (Rows.Add()) “单添加”
  • 一键将新行实例批量添加到 DGV (Rows.AddRange()) “批量添加”
  • 一键根据“theObjects”添加新行 - 逐一列表(Rows.Add())“单添加列表”
  • 一键根据“theObjects”添加新行-批量列表(Rows.AddRange())“批量添加列表”

观察:我们将逐步改变 Clone() 方法。我们从最简单的克隆开始:return new MWERow(templateDGV);

  • 单次添加:DGV 中的所有条目都显示默认值,并且它们的“theObject”位于默认值上
  • 批量添加:DGV 中的所有条目都显示它们应该显示的值,并且“theObject”具有正确的值
  • 单一添加列表:与“单一添加”相同的行为
  • 批量添加列表:与“批量添加”相同的行为
  • 编辑每个块的每个第二个条目表明:
    • 所有行都正确连接到它们包含的对象(显示 1(从行)和 3(添加所有内容的列表)匹配
    • 只有通过“AddRange()”添加的行保持与它们来源的对象的连接(这只能针对“theObjects”列表中的那些项目进行测试,因为它们的实例存在于添加范围之外)。
    • 从“theObjects”列表中添加对象两次(批量!)表明更改一个元素(比如第三个)会更改链接到该元素的每一行=>该行原则上工作

继续克隆半熟的方式:return new MWERow((MWEObject)theObject, templateDGV);

  • 无论添加如何完成,所有行都显示它们应该显示的值并包含它们应该包含的值
  • 编辑一个条目会更改基于同一对象的所有其他条目,无论添加的确切方式如何
  • 使用“在此处添加新行”-Row 添加新行时,该行中的值开始默认为已添加集合中的最后一行

最后一步,进行完整克隆:return new MWERow((MWEObject)theObject.Clone(), templateDGV);

  • 无论添加如何完成,所有行都显示它们应该显示的内容
  • 只有批量添加的那些行在后台保留与同一对象的连接并正确反映其更改
  • 添加新行时,每个新的“新行”都具有应具有的默认值

这些观察结果是一致的,无论是否AllowUserToAddRows = true/false;订阅dgv.RowsAdded表格。(虽然我对 rowAdded-Event 的索引处理可能仍然存在问题)

结论:

短:WTF?

Long:新行的创建方式似乎有问题。我理解文档的方式,一般程序如下:

  • 行的一个实例给出为RowTemplate。我将此模板设置为显示默认值
  • 对于“新行”-行,创建此模板的克隆。
  • 编辑此“新行”后,它会移动到已编辑行的领域,我的值移动技巧可以发生,以便行内的对象可以反映新编辑的值
  • 由于这个新行的克隆现在是一个功能齐全的行,我们需要一个新的“新行”,所以我们克隆模板以重新开始。

当以编程方式添加行时,模板行不应该有任何后果,因为我们提供了一个完全增长的行,并带有一个非默认对象。我可以解释观察到的行为的唯一方法是:

  • 使用Rows.Add()获取该行并将其克隆插入 DGV
  • 使用Rows.AddRange()插入行本身

因为我只是清楚地想到了这一点,所以我使用分配给未在克隆方法中复制的行的属性(或者在克隆方法中设置为“克隆”)对其进行了测试。使用Add()-Method 时,该属性的值消失了,使用时AddRange()它就在那里。其余的行为与我上面写的一致,并且当确实涉及克隆的整个过程时才有意义。

问题:为什么Rows.AddRange()表现不一样Rows.Add()?我错过了什么?为什么没有详细的编写自己的指南DataGridViewRow?这是设计使然吗?

很抱歉这篇长篇文章,但我想澄清我的问题并展示我测试过的所有内容......而且我似乎已经弄清楚发生了什么,我只是想知道为什么......

0 投票
1 回答
51 浏览

vb.net - 如何按列名(不是按索引)检索新声明的 DataGridViewRow 的值?

我正在尝试将 DataGridViewRow 的精确副本存储到同一行的标签中,一切正常,结果应该是......除了当我尝试使用列 Name 检索值时(在最后一行代码),它告诉我列名不存在。但如果我使用索引,一切正常。

我曾尝试使用 CreateCells() 或 Clone() 方法来创建原始表的结构,但仍然无法正常工作。

我可以坚持使用索引。但我更愿意按列名获取值。那可能吗?

参数名称:columnName')