我在DBGridEh中自定义了一列,属性是CheckBoxes,功能是运行时通过Checkboxes的选中和被选中来确定这行记录是否被操作,但是在运行时这列不能被单击。
我首先是在ClientDataSet组件中添加了一个Boolean类型的字段,字段种类为fkCalculated,然后在DBGridEh中引用了这个字段,运行时这列的CheckBoxes默认全被选中,不能单击操作Checkboxes,请问我如何在DBGridEh中实现这个用单选框操作来确定是否处理这行记录的功能呢?

解决方案 »

  1.   

    计算字段是只读的
    只能在oncalculate事件里赋值
      

  2.   

    在数据集中选择的时间,多选出一个字段来绑定到grid中
      

  3.   

    procedure TFXJLL_PZCF.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    var
      s: string;
      df:UINT;
      r: TRect;
    const
      // 这个整数值将按照布尔值返回,并送入数组
      CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
      DFCS_BUTTONCHECK or DFCS_CHECKED);
    begin
      if Query1.fieldbyname('XZ').value='1' then
      begin
        DBGridEh1.Canvas.Font.Color:=ClRed;
      end;
      DBGridEh1.DefaultDrawColumnCell(rect,datacol,column,state);   
      if Column.Field.FieldName ='XZ' then
      begin
        r := Rect;
        DrawFrameControl(dbgrideh1.canvas.handle, r, DFC_BUTTON,CtrlState[Boolean(Column.Field.Value)]);
      end;
      if Column.Field.FieldName ='PZLB' then
      begin
        s := Column.DisplayText;
        case Column.Alignment of
          taLeftJustify: df := DT_LEFT;
          taCenter: df := DT_CENTER;
          taRightJustify: df := DT_RIGHT;
          else df := DT_LEFT;
        end;
        r := Rect;
        DrawTextEx(dbgrideh1.canvas.handle,PChar(s),Length(s),r,df,nil);
      end;
    end;
      

  4.   

    DBGridEh1.Columns[?].Alignment:=taCenter;
    并将你那个字段的Alignment属性设为taCenter。
      

  5.   

    现在是这样的情况:我在ClientDataSet数据组件中自定义了一个字段,类型是boolean,在DBGridEh中将这个字段设置成CheckBoxes,但在运行是这列默认的是被选中的状态,并且为灰色不可操作的状态,这个是什么问题呢?
      

  6.   

    to liuhelin(鹤林) 
    你说得那个事件在哪啊?我怎么找不到
      

  7.   

    我也遇到同样的问题,我用的是dxgrid,但是没有在ClientDataSet中新增字段,而是直接在dxgrid中添加一列,结果不能修改那一列,我的初衷和楼主是一样的啊!
    顶!!!
      

  8.   

    建议你在库里增加一个boolean类型的字段,而不是数据集
    这样可以随意操纵checkbox
      

  9.   

    对于Boolean型字段值在dbgrideh组件中自动显示为检查框。通常情况下我们需将非Boolean型字段值也此外观显示,如性别字段为字符型,字段值为“男性”时为选中,“女性”时为未选中。需要在keylist编辑器中设置实际存储数据值,第一行为选中时的值“1”,第二行为未选中的值“0”,第三行为其它值“2”,支持三态显示