DBGridEh1通过DataSource1连接到ADOTable1
ADOTable连接的表有10条记录,我不希望用鼠标或键盘控制DBGridEh追加记录
因此,在DataSource里,去掉DBGridEh按下箭头自动加行功能
procedure DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if TDataSource(Sender).DataSet.Eof then TDataSource(Sender).DataSet.Cancel;
end;然后,当鼠标向下滚动过DBGridEh最末一行之后,
双击最末一行单元格
procedure DBGridEh1DblClick(Sender: TObject);
begin
  if DBGridEh1.SelectedIndex = 0 then
    with ADOTable1 do
      begin
        Edit;
        FieldByName('name').AsString := 'testtest';//报错:dataset not in edit or insert mode
        Post;
      end;
end;该怎么处理?谢谢

解决方案 »

  1.   


    我不希望插入和追加记录,只需要在DBGridEh中编辑已有的10条记录中的某一条。刚才用了这个方法解决:if Eof then begin MoveBy(-1); MoveBy(1); end;
    但不知道是否有更好的方法
      

  2.   

    这些控件功能,dbhgrideh都有的,在AllowedOperation属性里有四个控件项分别是:
    插入
    修改
    删除
    追加
      

  3.   

    楼上,我试过了,设置插入、删除、追加这三个值为False,但当鼠标滚动过最末一行时,虽然不会新增一行,但双击单元格执行代码ADOTable.Edit;ADOTable.FieldByName('name'):='test';ADOTable.Post;时,仍然报那个错
      

  4.   

    这个就不要了
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
    begin
      if TDataSource(Sender).DataSet.Eof then TDataSource(Sender).DataSet.Cancel;
    end;
      

  5.   

    不允許添加,只能修改嗎???在dataset的beforeinsert事件裡面加上Abort就行了
      

  6.   

    报错的原因是你用了这个事件DataSource1DataChange
    如果你刚好双击最后一行,那都dataset.Cancel了,当然报错了,去掉吧