c# – 表单DataGridView缺少OnRowDataBound?

昨天,一位同事问我如何在网格中显示数据,其中内置数据绑定不支持他想要为某些列做什么.

很高兴能够帮助我解释所有关于OnRowDataBound事件以及如何挂钩它并动态操作行对象中的单元格以完成您想要的任何操作.大.如果您正在使用asp.net.

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

那么winforms的人怎么会管理这个呢?

解决方法

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

因此,如果RowsAdded为您工作而不会降低性能,那就太好了.如果没有,你仍然有很多选择.您可以从DataGridViewCell和DataGridView派生,以将自定义单元格(列)类型添加到网格中.这可能是自定义DataGridView最复杂的方法……但它几乎可以让你想要任何类型的单元格操作.

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

HTH,理查德

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...