我正在尝试在datagridview单元格中显示自定义控件,以便显示格式正确的信息。
我很熟悉使用datagridview控件接受对象列表作为其数据源。我也很乐意在cellformatting事件中填充单元格内容。
所以我打算在datagridview单元格中使用普通的文本框控件,按钮控件和链接文本控件,显示我自己的自定义控件,这对于显示一些自定义数据,如姓名,地址,电话,照片和其他。这对我的应用程序来说是一个很好的改进。
我很欣赏其他方法的一些建议。
答案 0 :(得分:5)
您需要从DataGridControl继承并覆盖它生成的一些方法和属性。网上有几篇好文章供你参考,包括:
How to: Host Controls in Windows Forms DataGridView Cells
Custom DataGridViewColumn & IDataGridViewEditingControl classes
答案 1 :(得分:3)
有几个步骤可以将自定义用户控件巧妙地嵌入到DataGridView中,作为该网格中单元格使用的编辑控件。
首先,您需要编写一个继承自您的自定义控件和的类来实现IDataGridViewEditingControl。这为您提供了一个封装自定义控件的DataGridViewEditingControl类。将其称为 CustomDataGridViewEditingControl
您需要完成此接口的一些关键方法; * EditingControlFormattingValue,它需要返回代表你值的东西。 * EditingControlWantsInputKey,它将控制您想要或不允许的特殊击键
一旦你有了这个 CustomDataGridViewEditingControl ,封装你的自定义控件,你需要创建另一个继承自DataGridViewTextBoxCell的类。称之为 CustomDataGridViewCell 。
这是表示包含自定义控件的单元格的类。将模块级变量设置为 CustomDataGridViewEditingControl
的实例private MyCustomGridViewEditingControl _editControl;
然后,覆盖:
InitializeEditingControl - 设置自定义控件所需的任何默认值。您通常需要先调用base.initialiseEditingControl,然后传入被重写方法接收的参数。
ValueType - 返回自定义控件所代表的数据类型,例如return typeof(DateTime)
EditType - 返回编辑控件的类型,例如return typeof(MyCustomControl)
DefaultNewRowValue 如果每次DataGridView请求(插入)新的编辑行时都需要为编辑控件提供默认值
Next 您需要使用此重写的DataGridViewCell( CustomDataGridViewCell )类作为您正在使用的列的CellTemplate属性。我已经实现了自定义DataGridViewColumns来控制它,但这可能比你想要/需要的更进一步。 (如果您打算在许多网格中使用自定义控件,那么您可以这样做。)
为此,创建一个继承自DataGridViewTextBoxColumn的类,并将其CellTemplate属性设置为 CustomDataGridViewCell 的实例
令人困惑,因为很多术语和类都有相似的名字 - 希望这有帮助。
总结: 1)创建 CustomDataGridViewEditingControl - 继承自您的自定义用户控件但实现IDataGridViewEditingControl
2)创建 CustomDataGridViewCell - 它使用 CustomDataGridViewEditingControl (步骤1)作为其编辑控件。
3)使用 CustomDataGridViewCell (步骤2)作为DataGridViewColumn的CellTemplate
希望足够清楚......