一个DBGrid,我想在DBGrid里面手工添加数据,一条记录每个字段必须全部填写,如果不填写全就不允许添加下一条。

解决方案 »

  1.   

    在Dbgrid没有发现onCellExit事件,所以不太好处理
      

  2.   

    你在数据库中将与DBGrid关联的表的每一项改称不能为空,再将DBGrid的READONLY属性改为假
    再添加一个数据控制控件,与表关联就行了
      

  3.   

    用QUERY写SQL语句,或者用循环语句对TABLE一条条检查,再或者用TABLE的过滤检查,总而言之
    方法多种多样,不过效率就不一样了
      

  4.   

    那怎么扑获错误信息呀?!tryexceptend; 用这个???
      

  5.   

    在数据源BeforePost事件里写
    var 
      i:integer;
      IsNull:boolean;
    begin
      IsNull:=False;
      for i:=0 to Form1.DBGrid1.Columns.Count-1 do
        if Form1.DBGrid1.Columns.Items[i].value:='' then IsNull:=True;
      if IsNull then
      begin
        Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
        Abort;
      end;
    end;
      

  6.   

    if Form1.DBGrid1.Columns.Items[i].value:='' then IsNull:=True;这句不对啊!不能识别标示 value
      

  7.   

    检查各字段trim(dbgrid.dataset.fieldByname('fieldname').asstring)是否=‘’;
      

  8.   

    其实在你移动行焦点时自动触发post方法,所以在beforepost事件里截获最为合理请使用samcrm(阿靖) 的方法
      

  9.   

    但是samcrm(阿靖) 的方法编译不通过呀!~
    if Form1.DBGrid1.Columns.Items[i].value ='' then IsNull:=True;这句不对啊!不能识别标示 value
      

  10.   

    改成:DBGrid1.DataSource.DataSet.Fields[i].Value:=''
      

  11.   

    同样有问题!!!还没有post呢,它怎么检查得到呢?
      

  12.   

    类似 samcrm(阿靖) 的做法:
    procedure TForm1.Table1BeforePost(DataSet: TDataSet);
    var
      i: Integer;
      IsNull: Boolean;
    begin
      IsNull := False;
      for i:=0 to Form1.DBGrid1.Columns.Count-1 do begin
        if Form1.DBGrid1.Columns[i].Field.IsNull then begin
          IsNull := True;
          Break;
        end;
        if Form1.DBGrid1.Columns[i].Field.Value = '' then begin
          IsNull := True;
          Break;
        end;
      end;
      if IsNull then begin
        Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
        Abort;
      end;
    end;
      

  13.   

    原来用Value可能会有些问题,直接用AsString就行了,更简单:
    procedure TForm1.Table1BeforePost(DataSet: TDataSet);
    var
      i: Integer;
    begin
      for i:=0 to Form1.DBGrid1.Columns.Count-1 do
        if Form1.DBGrid1.Columns[i].Field.AsString = '' then begin
          Application.MessageBox('保存失败,有空白字段!','错误',MB_ICONERROR + MB_OK);
          Abort;
        end;
    end;