同时有个全选反选的按钮的脚本如下,也不能做到更改
procedure TForm3.btn4Click(Sender: TObject);
begin
  with qryvoucher do
  begin
    try
      DisableControls;
      if (not isempty) then
      begin
        first;
        while not eof do
        begin
          edit;
          FieldByname('IsSelect').AsBoolean := not FieldByname('IsSelect').AsBoolean;
          next;
        end;
      end;
    finally
      EnableControls;
    end
  end;
end;

解决方案 »

  1.   

    你是直接连接数据库,还是C/S。
    我在使用DBGridEh时,未遇到这种情况。
    是否设置该字符“isSelect”为只读?
      

  2.   

    C/S,   设置了  IsSelect.readonly:=false 
      

  3.   

    确定单击可以去掉勾,但是焦点一切换至下行,更改就无效,同时用按钮    来处理勾上或不勾上    也是无法变更dataset中实际内容
      

  4.   

    仔细的检查一下数据表格DBGridEh的各种事件,很有可能是相互影响了,或者查看ADO的各种事件。
    还有就是调用的函数过程什么的,里面有可能有影响点击生效的操作。
    实在不行设置一下KeyPreview试一试,但这个似乎没什么道理。
      

  5.   

    另外,尝试一下将DisableControls去掉,我在应用中发现,有时候这个会影响里面的操作。
      

  6.   

    DATASource 还是 DataSet中有一个属性是AutoEdit
    你应该没有设置为TRUE
    不过这种编辑方式还是很危险的
      

  7.   

    也可以自已处理BeforeScroll事件,添加相应的判断及Post操作自己来处理虽然不那么省心省事,但好处是一切自己掌握
      

  8.   

    1、检查一下DBGridEh的相关事件,是否有冲突。
    2、 这种情况一般是DBGridEh的数据集未牌编辑状态,适当的事件中加入Edit,试试。
      

  9.   

    楼主应该是使用了非真实的数据库字段吧,比如计算字段或isSelect=a.Select这样的字段吧
      

  10.   

    procedure TForm3.btn4Click(Sender: TObject);
    begin
      with qryvoucher do
      begin
        try
          DisableControls;
          if (not isempty) then
          begin
            first;
            while not eof do
            begin
              edit;
              FieldByname('IsSelect').AsBoolean := not FieldByname('IsSelect').AsBoolean;
              post;//====================
              next;
            end;
          end;
        finally
          EnableControls;
        end
      end;
    end; 
      

  11.   

    是不是少了个POST???
      

  12.   

    我有一个很实用的解决方案,给你参考一下
    https://mp.csdn.net/postedit/86216084
      

  13.   

    先看你的字段是不是int或bit型, 另外要看picklist设置对应的值,一般是0和1吧