c# - 表单 DataGridView 缺少 OnRowDataBound?

标签 c# .net asp.net winforms

昨天一位同事问我如何在内置数据绑定(bind)不支持他想对某些列执行的操作的网格中显示数据。

很高兴能够提供帮助,我解释了有关 OnRowDataBound 事件的所有信息,以及如何连接到它并动态操作行对象中的单元格以执行几乎所有您想要的操作。伟大的。如果您使用的是 asp.net。

唯一的问题是他正在编写一个 winforms 应用程序,而 DataGridView 不支持 OnRowDataBound!我简直不敢相信,但它就是不存在。

那么 winforms 人到底是如何管理这个的呢?

最佳答案

RowsAdded事件大致相同,但由于 shared memory state,使用此事件访问行可能会遇到性能问题它用。这本质上是一种方案,其中 DataGridView 尝试通过尽可能在行之间共享一些状态来最小化其内存占用,直到您访问其中一个共享行,这会导致它取消共享状态(内存和可能的性能影响).很多东西都被优化掉了,但出于某种原因,我在使用这个事件时遇到了问题。

因此,如果 RowsAdded 对您有效且不会降低性能,那就太好了。如果没有,您仍然有很多选择。您可以从 DataGridViewCell 和 DataGridView 派生以将自定义单元格(列)类型添加到网格。这可能是自定义 DataGridView 的最复杂的方法...但它几乎允许您进行任何类型的单元格操作。

CellPainting如果您希望在显示之前用 GDI+ (System.Drawing) 绘制某些内容,事件可以让您进入特定单元格的绘制。还有一个 CellFormatting事件也为您提供特殊事件参数 - 但我从未使用过那个,所以我不确定共享内存状态问题是否适用(通常对于绘画事件它不适用)。

喂, 理查德

关于c# - 表单 DataGridView 缺少 OnRowDataBound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733103/

相关文章:

c# - ASP Web API 在不同的应用程序实例之间共享代码库?

c# - 如何转换我的分页功能以使用 AJAX Insead?

c# - 程序集加载失败,没有融合日志错误

C# 在 64 位操作系统上读取错误的注册表数据

c# - 如何在 C#/Winforms 中将队列绑定(bind)到 DataGridView?

C# EventHandler 文档代码示例

c# - ASP.Net 控件的 InnerHTML 和 InnerText 属性之间的区别?

java - 从 C# 客户端调用带有对象参数的 Java Soap Web 服务方法

c# - 将字符串 [123,234,...] 转换为 List<int> 并返回的更好方法

c# - 如果我需要保留 "wrapped"流,我应该处理 BinaryReader 吗?