问题标签 [datagridview]

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 投票
4 回答
10904 浏览

c# - 如何使 DataGridView 使用鼠标滚轮一次滚动一项?

当使用鼠标滚轮和这个控件时,我们想覆盖 DataGridView 的默认行为。默认情况下,DataGridView 滚动的行数等于 SystemInformation.MouseWheelScrollLines 设置。我们想做的是一次只滚动一个项目。

(我们在 DataGridView 中显示图像,图像有点大。由于这种滚动三行(典型的系统设置)太多,经常导致用户滚动到他们甚至看不到的项目。)

我已经尝试了几件事,到目前为止还没有取得太大的成功。以下是我遇到的一些问题:

  1. 您可以订阅 MouseWheel 事件,但无法将事件标记为已处理并做我自己的事情。

  2. 您可以覆盖 OnMouseWheel 但这似乎永远不会被调用。

  3. 您可能可以在基本滚动代码中更正此问题,但这听起来很麻烦,因为其他类型的滚动(例如使用键盘)通过相同的管道进行。

有人有好的建议吗?

这是最终代码,使用给出的精彩答案:

0 投票
2 回答
72253 浏览

c# - 使用现有列向 datagridview 添加行

我有DataGridView几个创建的列。我添加了一些行,它们可以正确显示;但是,当我单击一个单元格时,内容就会消失。

我究竟做错了什么?

代码如下:

谢谢!

0 投票
1 回答
2557 浏览

c# - C# ResetBinding 翻转 DataGridView *用示例更新*

我遇到了一个部分解决的问题。快速解释一下:我有一个绑定到需要序列化的复杂对象的网格。从序列化中构建对象时,网格上的事件不会刷新表格显示。有人告诉我在反序列化后重建事件,它可以工作!但是刷新网格的事件似乎根本没有触发。

我必须从我的复杂对象构建一个事件,告诉我内部发生了一些变化。从这个事件我添加了这个代码:

问题是网格在翻转,用户感觉不好(行上下移动而不是停止)。

如何在没有这种翻转的情况下重置绑定?我怎样才能解决原来的问题?(这将自动解决所有问题)。

更新

这是一个执行完全相同行为的示例:

创建一个类:

现在,使用 BindingSource 调用“bindingSource1”创建一个表单,并使用该类作为数据源。创建一个网格并将该网格绑定到 bindingsource1。

在该表单中,在 load 中使用此代码:

我将序列化过程放在注释中,因为如果没有它,它似乎会出现同样奇怪的行为......现在启动应用程序。更改客户的名称。“新名称”的示例“p1”,然后单击已更改名称下的单元格。您将看到“len”列没有改变。但是,如果您单击具有 len 的单元格,您将看到数字变为正确的值。

有人知道为什么吗?

0 投票
7 回答
3327 浏览

c# - DataGridView 的绑定表在双击时只生成一个 RowChanged 事件。我如何让它做两个?

我有一个 DataGridView,它的 DataSource 是一个 DataTable。此 DataTable 有一个布尔列,它被解释为 DataGridView 中的一个复选框。

当用户单击一个复选框时,它会被选中,并且 selectionTableRowChanged 将输出“Is Selected”。

同样,当用户再次检查时,该框被清除,并且 selectionTableRowChanged 输出“未选中”。

这是我遇到问题的地方:

当用户双击复选框时,复选框被选中,RowChanged 事件被调用(“Is Selected”),然后复选框被清除,不会调用相应的 RowChanged 事件。现在 RowChanged 事件的订阅者不同步。

我现在的解决方案是继承 DataGridView 并覆盖 WndProc 以吃掉 WM_LBUTTONDBLCLICK,因此任何双击控件都会被忽略。有更好的解决方案吗?

0 投票
1 回答
1694 浏览

.net - Windows Vista下自定义DataGridView列不接受输入的小数分隔符

对于一个项目,我构建了一个包含 NumericUpDown 控件的自定义 DataGridView 列。它的实现类似于微软的建议

该列在 Windows XP 下运行良好。它接受输入的数字和小数分隔符。在 Windows Vista 下,我有一个奇怪的问题,即控件只接受由数字小键盘输入的小数分隔符,而不接受来自键盘主块的小数分隔符。

我必须补充一点,我在 Windows Vista 下使用德语(瑞士)文化设置,并且激活了德语(瑞士)键盘布局。瑞士的小数分隔符是 .

有人对原因有想法,也许有解决方案?非常感谢你!

迈克尔

编辑: 我找到了解决问题的方法。

  1. 稍微澄清一下情况。我使用的 NumericUpDown 控件实现了 IDataGridViewEditingControl 并继承自 NumericUpDown。由于 IDataGridViewEditingControl,我实现了 EditingControlWantsInputKey 方法。而在执行这个方法的过程中,我发现了我的错误或者出了什么问题。

  2. 在该方法中,我检查了输入的键并决定控件是否必须处理它。但是对于小数点分隔符,我只期望Keys.Decimal。在我的特殊(错误)情况下,密钥无法匹配。缺少的是也寻找Keys.OemPeriod。这就是解决方法。

0 投票
3 回答
1142 浏览

winforms - 如何将 DataGridView 数据中的数据导出到 Excel 电子表格?

在我的 Winforms 应用程序中,我想将数据从 DataGridView 导出到 Excel 电子表格。

它只是循环和输出逗号分隔的结果的工作吗?

0 投票
8 回答
40441 浏览

.net - 右键单击以选择 datagridview 行

如何在右键单击时选择 datagridview 行?

0 投票
3 回答
3917 浏览

c# - 在 DataGridViewComboBoxColumn 中显示无效的默认值

我在 Windows 应用程序的 DataGridView 中有一个 DataGridViewComboBoxColumn。用户可以在其他地方更改设置,以使 DataGridViewComboBoxColumn 中的选择可能无效。我需要保留/显示无效项目,同时只在列表中选择有效项目。

如果不更正选择,则会引发异常:
DataGridViewComboBoxCell 值无效。

捕获并忽略该设置会将所选值还原为列表中的第一个有效项目。

有没有办法为 DataGridViewComboBoxColumn 提供一个值,这样它就不会出现在可选值​​列表中?

0 投票
6 回答
31924 浏览

c# - 删除最后一行数据绑定 DataGridView C#

我正在使用 VS 2008/C# 并将帮助程序类的本地列表绑定为 DataGridView 控件的数据源。在我的助手类列表上调用 Remove() 方法会触发 DataGridView 的 CellFormatting 事件,这是有道理的(有点)。

当删除网格中最后一行的 DataBoundItem 时(只要网格不止一行),DataGridView 的 Rows 集合在此事件触发之前不会更新。因此,在 CellFormatting 事件处理程序中,我得到一个 IndexOutOfRangeException,因为 Rows 集合太大了。

我尝试使用 DataGridView.Rows.Remove() 方法删除行,并使用 BindingSource 进行绑定,而不是将 List 直接绑定为数据源。

我通过 Google 找到了一些关于此事件的引用,但答案要么没有出现,要么据说在 DataGridView 或 DataGridView.Rows 集合上使用 Delete() 方法——目前都不存在。

排序似乎也不是问题,因为执行/不执行排序会导致相同的结果。

“最后一行”的唯一例外是删除问题是 DataGridView 是否只包含一行 - 在这种情况下一切正常。

0 投票
1 回答
244 浏览

c# - 为什么我的 datagridview 在逃逸时重新定位

我在管理的 c# 项目中的表单上有一个 DataGridView 控件。(.net 2.0)当我使用鼠标上的滚动按钮然后单击一个单元格并单击退出按钮或选择另一个单元格时,网格将自行重新定位。但是,如果我在控件上使用滚动条,则不会发生这种行为。

有没有人以前见过这样的行为,或者对可能导致它的原因有任何想法?