在“Paint”函数中获取数据网格中一行中单元格的值?

时间:2012-07-28 16:38:03

标签: c# .net winforms compact-framework

我继承了datagridcolumnstyle,在Paint函数中,我需要根据正在渲染的行中的单元格做一些事情。

例如,我有以下内容:

row 1: color1, name, last name
row 2: color2, name2, last name2
row 3: color3, name3, last name3

名称和姓氏列需要使用颜色列中定义的颜色进行绘制。

因此,当绘制与name2相关的datagridcolumnstyle时,我需要能够执行以下操作:

protected override void Paint( Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight )
{
Color color = (Color)GetRow( rowNum ).GetCell(color1).Value;
}

2 个答案:

答案 0 :(得分:1)

我不知道这是什么或如何让它工作,但这是微软的DataGridColumnStyle Class示例中显示的示例:

protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum,
    Brush backBrush, Brush foreBrush, bool alignToRight) {
  DateTime date = (DateTime)GetColumnValueAtRow(source, rowNum);
  Rectangle rect = bounds;
  g.FillRectangle(backBrush, rect);
  rect.Offset(0, 2);
  rect.Height -= 2;
  g.DrawString(date.ToString("d"), this.DataGridTableStyle.DataGrid.Font, foreBrush, rect);
}

基于该代码片段,我想说这个工具的原因是从提供的坐标处读取单元格中的值,并根据该值更改颜色。

因此,如果值无效,则可以将单元格绘制为红色。

如果未保存该值,则可以将字体设为粗体。

但是,我发布的示例非常适合Windows Mobile!

答案 1 :(得分:1)

我使用的简单解决方案是在创建时将对拥有的DatGrid的引用传递给自定义DataGridColumnStyle对象。这可以通过构造函数或通过属性完成。然后,您可以在Paint期间访问整行。