2011-11-30 74 views
3

我想在一个DataGridView单元格中显示自定义的控制,这样我可以很好地显示格式化信息的单元格的内容。如何使用自定义控制在编辑一个DataGridView

我与接受对象作为其数据源的列表,使用DataGridView控件的很舒服。我也很喜欢在cellformatting事件中填充单元格内容。

所以我打算,而不是使用正常的文本框控件,datagridview单元格中的按钮控件和链接文本控件,显示我自己的自定义控件,这是显示一些自定义数据,如名称,地址,电话,照片和别的。这将是我的应用程序的一个很好的改进。

我希望得到一些建议等方法来实现这一点。

+0

你或许应该确认这是否是ASP.Net或的WinForms,等等。 – LarsTech

+0

它的一个winfirm应用程序.... – KoolKabin

回答

3

有几个步骤,这个整齐地嵌入您自定义用户控件到DataGridView的作为编辑该网格中单元格使用的控件。

首先,你需要写一个从您的自定义控制实现IDataGridViewEditingControl继承的类。这给你一个封装你的自定义控件的DataGridViewEditingControl类。把它叫做CustomDataGridViewEditingControl

这个接口上的一些关键方法需要完成; * EditingControlFormattingValue将需要返回代表你的值。 * EditingControlWantsInputKey将控制你想要什么特殊的键击允许或禁止

一旦你在地方有这个CustomDataGridViewEditingControl,封装自定义控件,您需要创建另一个类,它继承DataGridViewTextBoxCell。将其称为CustomDataGridViewCell

这是代表在它您的自定义控制细胞的类。设置一个模块级变量作为CustomDataGridViewEditingControl

private MyCustomGridViewEditingControl _editControl; 

然后,覆盖的实例:

InitializeEditingControl - 设置你的自定义控制需要任何默认值。通常你首先需要调用base.initialiseEditingControl来传入覆盖方法接收到的参数。

值类型 - 返回的数据类型定制控件代表如返回typeof(DateTime)

EditType - 返回编辑控件的类型,例如返回的typeof(MyCustomControl)

DefaultNewRowValue如果你需要每次在DataGridView请求(插入)新的编辑行

提供一个默认值编辑控制器接下来你需要哟使用本重写DataGridViewCell(CustomDataGridViewCell)类作为您正在使用的列的CellTemplate属性。我已经实现了自定义的DataGridViewColumns来控制过去,但这可能比您想要/需要去的更进一步。 (如果你想要在很多网格中使用自定义控件,那么你可以这样做)

为此,创建一个从DataGridViewTextBoxColumn继承的类,并将其CellTemplate属性设置为您的实例CustomDataGridViewCell

这很令人困惑,因为很多术语和类有相似的名称 - 希望这可以提供帮助。

总结: 1)创建一个CustomDataGridViewEditingControl - 从您的自定义用户控件继承,但实现IDataGridViewEditingControl

2)创建CustomDataGridViewCell - 这用作其编辑CustomDataGridViewEditingControl(步骤1)控制。

3)使用作为的DataGridViewColumn

希望这是够清楚的CellTemplate您CustomDataGridViewCell(步骤2)...

相关问题