我在DBGIRD中打开了一个空表,例如有两个字段 “学号”,“姓名”我想实现  输入一个记录后此记录就不能更改了,但可以添加另一条记录。如:我输入第一条记录后,点击一个自建的“添加”botton,该记录就写入了,
但此后就不允许更改了!!并且记录光标自动下移一行,出现一个空白的行用于第二个记录的输入,怎么实现那

解决方案 »

  1.   

    变通一下,点击一个自建的“添加”botton,然后Insert,修改DBGrid的ReadOnly属性,不点击就不让他添加
      

  2.   

    to ljmanage(过客)
    "不点击就不让他添加"那是不是我点击就可以添加,那是不是 还是可以进行已输入记录的修改?我是想不修改以前的记录了,行吗?
      

  3.   

    可以加一个标示字段:假设字段名为bs,在添加记录时给它一个初始值(0)(也可以在建表时给一个默认值0),在记录提交之后给它重新赋值(1),在dbgrid的oncellclick事件进行
    控制:
    procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
       if adoTable1xh.AsInteger >0 then
       begin   dbgrid1.ReadOnly :=true;
      end
      else dbgrid1.readonly:=false ;
    end;
    给分吧!谢谢!
      

  4.   


    更正一下:procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
       if adoTable1bs.AsInteger >0 then
       begin   dbgrid1.ReadOnly :=true;
      end
      else dbgrid1.readonly:=false ;
    end;
    对不起!
      

  5.   

    if adoTable1bs.AsInteger >0 then上句不太懂呀
    什么意思
      

  6.   

    可以这样试一下:在DBGRID对应的数据源的AFTERSCROLL事件中写:if DataSet.Stats in [dsInsert] then //当前在插入状态
      begin
        DataSet.FieldByName('字段名称').ReadOnly := false;//所有要控制的字段全设置一次
      end
    else
      begin
        DataSet.FieldByName('字段名称').ReadOnly := True;//所有要控制的字段全设置一次
      end
      

  7.   

    if adoTable1bs.AsInteger >0 then
    此句的意思是判断表示字段的值是否为1,如为1表示此记录已经提交不可以修改!
    adotable1bs相当于adotable1.fieldbyname(bs),明白了吗?