晕,太难了吧,winform下datagrid的问题

ljb2000 2004-07-07 10:27:55
DataGridTextBoxColumn 里有这样一个受保护的方法 Paint
如果想调用Paint方法 必须定义一个继承于DataGridTextBoxColumn的对象
MSDN里有例子代码 代码简化后如下
这样写编译时并不报错 但是执行时会报错.
错误提示是"指定的转换无效"
dgt.GridColumnStyles[hi.Column]返回的类型是DataGridTextBoxColumn
当我想把DataGridTextBoxColumn转换成MyGridColumn时
就失败了 这是为什么呀?
DataGridTextBoxColumn gridCol =(DataGridTextBoxColumn)dgt.GridColumnStyles[hi.Column];
这样写是没问题的

public class Form1: Form
{
private void PaintCell(object sender, MouseEventArgs e)
{
MyGridColumn gridCol =(MyGridColumn)dgt.GridColumnStyles[hi.Column];
gridCol.PaintCol(g, cellRect, cm, hi.Row, bBrush, fBrush, false);
}
}

public class MyGridColumn:DataGridTextBoxColumn
{
public void PaintCol(Graphics g, Rectangle cellRect,
CurrencyManager cm, int rowNum, Brush bBrush,
Brush fBrush, bool isVisible)
{
this.Paint(g, cellRect, cm, rowNum, bBrush, fBrush, isVisible);
}
}
...全文
169 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cofish 2004-07-07
  • 打赏
  • 举报
回复
往dgt.GridColumnStyles里面插入MyGridColumn类型,而不要插入DataGridTextBoxColumn类型的,这样从dgt.GridColumnStyles[hi.Column]得到的就是MyGridColumn类型了,问题就OK了.
cofish 2004-07-07
  • 打赏
  • 举报
回复
很显然,从dgt.GridColumnStyles[hi.Column]得到的是DataGridTextBoxColumn类型,怎么
能转换成MyGridColumn呢?
除非从dgt.GridColumnStyles[hi.Column]得到的是MyGridColumn类型.
这是概念理解错误的问题:基类转换成子类.
例如:
class A
{
}

class B : A
{
}

A a1 = new A();
B b1 = (B)a1; (错误,基类转换成子类了)

A a2 = new B();
B B2 = (B)a2; (这是正确的)






ljb2000 2004-07-07
  • 打赏
  • 举报
回复
基本上我想实现的功能是
能随意改变DataGrid里任意单元格Cell的背景色和前景色
这就需要继承DataGridTextBoxColumn这个对象
然后调用其中Paint这个方法重绘指定单元格的背景色和前景色
lizh383 2004-07-07
  • 打赏
  • 举报
回复
up
vzxq 2004-07-07
  • 打赏
  • 举报
回复
learn
ljb2000 2004-07-07
  • 打赏
  • 举报
回复
哦 原来如此
我使用你说的第二种方法了
谢谢

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧