2

我想为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);               
     }
 }

谁能指导我怎么做?

4

1 回答 1

1

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

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

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

在大多数情况下,第一个选项就足够了;如果单元格看起来与您的编辑控件完全相同很重要,请仅尝试其他方法之一。

于 2012-10-29T08:57:01.993 回答