如何在datagridviewcell上绘制自定义控件?

我想为datagridviewcell托管一个自定义控件。

我唯一的好参考是http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

但是,我希望单元格显示我自己的用户控件

  public class CustomCell : DataGridViewTextBoxCell { protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); } } 

谁能指导我怎么做?

为了节省资源, DataGridView控件中的单元格大部分时间都处于显示模式,仅在用户使用鼠标或键盘输入单元格时才更改为编辑模式。 你在问题中提到的例子被认为是最佳实践,因为编辑控件(在这种情况下,一个DateTimePicker ,但可能很容易就是你自己的自定义用户控件)只出现在编辑模式下,因此只有一个一次一个细胞。

当单元格不处于编辑模式时,它应使用DataGridViewCell子类的Paint方法内的逻辑呈现其值的等效表示。 您可以通过以下几种方式之一完成此操作:

  • 只需根据其值将文本或图像绘制到单元格的边界上; 不要试图复制编辑控件的外观。
  • 使用ControlPaintVisualStyleRenderer模拟编辑控件的外观(注意:这涉及许多额外的工作)。
  • 将绘制代码从自定义用户控件移动到实用程序类中,以便它和单元格都可以使用相同的绘制代码。

在大多数情况下,第一种选择就足够了; 如果单元格看起来与编辑控件完全相同,则只尝试其他方法之一。