问几个关于DBGrid的问题

happyzsl 2002-10-19 10:43:19
1.可以让DBGrid的一个Cell里出现的是一个CheckBox或Button吗?
我是想实现点一下某个Cell,用这个Cell里CheckBox表明选择了这一行
点一下另一个Cell,用这个Cell里的Button触发打开另一个窗口
2.把DBGrid的Option的dgRowSelect设为True,dgMutiSelect设为True后,选择的一行,怎么实现:点某一行中任一个Cell,这一行如果已是选择状态则变为未选择,未选择则变为已选择,“而其它行的选择状态不变”
...全文
19 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
winsock2000 2002-10-22
  • 打赏
  • 举报
回复
http://www.topdelphi.com/
iceshape1 2002-10-22
  • 打赏
  • 举报
回复
那位可以告诉我在拿下在InfoPower
cg1120II 2002-10-21
  • 打赏
  • 举报
回复
用DXDBGRID可以实现你讲的全部功能
eliuren 2002-10-20
  • 打赏
  • 举报
回复
到底怎么做,哪为高手能说详细点吗?关注!!!
ccnh 2002-10-19
  • 打赏
  • 举报
回复
需要BUTTON的话,直接用dxdbGrid来实现。 column类型中有CHECKBOX 、BUTTON。 还有CLICK响应事件。
happyzsl 2002-10-19
  • 打赏
  • 举报
回复
dbgrid的option中dgMutiSelect = True,dgRowSelect = True后,是点一行选一行,点另一行的话,原来选的一行就变成未选择了,我想要让原来已选择的还是已选择状态,而点了一行已选择的则只是把这行变为未选择
brallow 2002-10-19
  • 打赏
  • 举报
回复
1:好象要在Cell中显示控件是比较难的。不过我记和原来的VB中也有一种变通方法。那就是你可以临时生成一个TButton的对象,然后通过程序控制它的visible和top left等属性就可以完成你要的功能了。当然它的topmost最好还是打开了。要不你就看不到了。
2:我觉得好象如果打开了你要的multi应该就是这样的。具体没有试过
happyzsl 2002-10-19
  • 打赏
  • 举报
回复
thanks all first!

那这样的话,如果我要的是button怎么做了?

我第二个问题中显示已选择不是想通过一个column的值的显示,而是要通过把一行变为蓝来显示,怎么做?
ccnh 2002-10-19
  • 打赏
  • 举报
回复
1) 你可以自己画一个框和对勾表示选中,不过要通过1个字段Y或N来控制,也可以用其他的。
在DBGrid中布尔形数据显示为:为真时打一个"勾",为假时空白
附代码: dbgPPO : dbgrid , adoqryPPO : dataset
procedure TSPChargeForm.dbgPPODrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
left :integer;
begin
if Column=dbgPPO.Columns[0] then
begin
left :=Round((Rect.Right-Rect.Left-10)/2);

dbgPPO.Canvas.Brush.Color :=clWhite; //去掉阴影
dbgPPO.Canvas.FillRect(Rect);

dbgPPO.Canvas.Pen.Color :=clblue; //clTeal
dbgPPO.Canvas.Pen.Width :=1;

dbgPPO.Canvas.MoveTo(Rect.Left+Left,Rect.Top+3);
dbgPPO.Canvas.LineTo(Rect.Left+Left+10,Rect.Top+3);
dbgPPO.Canvas.LineTo(Rect.Left+Left+10,Rect.Top+13);
dbgPPO.Canvas.LineTo(Rect.Left+Left,Rect.Top+13);
dbgPPO.Canvas.LineTo(Rect.Left+Left,Rect.Top+3);

if adoqryPPO.FieldByName('ID').AsString='Y' then
begin
dbgPPO.Canvas.MoveTo(Rect.Left+Left,Rect.Top+6);
dbgPPO.Canvas.LineTo(Rect.Left+Left+4,Rect.Top+11);
dbgPPO.Canvas.LineTo(Rect.Left+Left+12,Rect.Top+1);
end;
end;
end;
2)在on cell click事件中改当前记录的布尔形数据的值,参见1)。 然后画。
3) 也可以直接用dxdbGrid来实现。 column类型中有CHECKBOX 。
happyzsl 2002-10-19
  • 打赏
  • 举报
回复

Cell中显示的是控件这个可能是比较麻烦,有没有懂的,可以请教一下吗?

那我的第2个问题呢?
Drate 2002-10-19
  • 打赏
  • 举报
回复
你这些要求如果用DBGRID做的话,可能比较麻烦,不如你上网上当一个infopower3000下来吧,它其中有一个twwDBGrid的控件,特别NB,感觉不错!
crazyz 2002-10-19
  • 打赏
  • 举报
回复
用Express哪一套控件中有一个DxdbGrid,很好用

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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