我在dbgrid想实现如下功能:
总体能够随意控制某行某列的情况。
比如:
1 控制i行j列的cell的readonly情况,随意控制
2 控制i行j列的cell的输入数据的格式情况,数值、日期或者其他
3 控制i行j列的cell的背景情况,突出显示为某种颜色、某种字体等。本人对dephi关于dbgrid的控制不是很了解,碰到这个问题好久了,一直没有解决。
希望各位能不吝赐教!谢谢了

解决方案 »

  1.   

    在数据网格中以红色突出显示当前选中的行。  设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色), 在DbGrid的DrawColumnCell事件中编写如下代码:  if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then   DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色   DbGrid1.Canvas.pen.mode:=pmmask;   DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
      

  2.   

    我想控制到每一个cell,如何实现呢?
      

  3.   

    你可以试试静态字段,对每一个字段可以随意控制readonly, 
              也可以控制输入数据的格式情况,数值、日期或者其他。
    自己试试吧,呵呵
      

  4.   

    你可以试试静态字段,对每一个字段可以随意控制readonly, 
              也可以控制输入数据的格式情况,数值、日期或者其他。
    自己试试吧,呵呵具体实现呢?
      

  5.   

    双击adoquey,选中对应的静态字段,f11,里面就有对应的属性,代码直接用静态字段(eg: adoquery1name.readonly)来控制就好了。
      

  6.   

    huanyi(残荷淡月) :能否具体说明?
      

  7.   

    怎么改变StringGrid控件某一列的背景和某一列的只读属性,StringGrid控件标题栏的对齐.怎么改变StringGrid控件某一列的背景和某一列的只读属性,StringGrid控件标题栏的对齐.
    请参考以下代码:
      在OnDrawCell事件中处理背景色。程序如下:
    //将第二列背景变为红色。
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if not((acol=1) and (arow>=stringgrid1.fixedrows)) then exit;
      with stringgrid1 do
      begin
        canvas.Brush.color:=clRed;
        canvas.FillRect(Rect);
        canvas.TextOut(rect.left+2,rect.top+2,cells[acol,arow])
      end;
    end;//加入如下代码,那么StringGrid的第四列就只读了.其他列非只读
    procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
    begin
      with StringGrid1 do begin
        if ACol = 4 then
          Options := Options - [goEditing]
        else Options := Options + [goEditing];
    end;procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
    var
      dx,dy:byte;
    begin
      if (acol = 4) and not (arow = 0) then
        with stringgrid1 do
        begin
          canvas.Brush.color := clYellow;
          canvas.FillRect(Rect);
          canvas.font.color := clblue;
          dx:=2;//调整此值,控制字在网格中显示的水平位置
          dy:=2;//调整此值,控制字在网格中显示的垂直位置
          canvas.TextOut(rect.left+dx , rect.top+dy , cells[acol, arow]);
        end;
     //控制标题栏的对齐
      if (arow = 0) then
        with stringgrid1 do
        begin
          canvas.Brush.color := clbtnface;
          canvas.FillRect(Rect);
          dx := 12; //调整此值,控制字在网格中显示的水平位置
          dy := 5; //调整此值,控制字在网格中显示的垂直位置
          canvas.TextOut(rect.left + dx, rect.top + dy, cells[acol, arow]);
      

  8.   

    谢谢: lyguo(愚人(每天顶几顶骗分升星星)) .
    可是在dbgrid控制如何实现呢?
      

  9.   

    PsGrid http://www.puersoft.com/product/psgrid.htm