DELPHI引用控件StringGrid,如何进行[删除,修改],添加我会 

解决方案 »

  1.   

    通过 ListView1.Items[i].Checked=True 来 判断是否选中 再 进行修改的 都在下面自己找找. 这段代码很容易读的.....    
    // {$R *.dfm}  
    procedure TFrmDSHKSZ.SumUp1;
    Var
      i,YD,SS:integer;
    begin
      YD:=0;  SS:=0;  for i:=0 to ListView1.Items.Count-1  do
        begin
          YD:=YD+StrToInt(ListView1.Items[i].SubItems[3]);
          SS:=SS+StrToInt(ListView1.Items[i].SubItems[4]);
        end;
       StxtGJB1.Caption:=IntToStr(ListView1.Items.Count);
       StxtYD1.Caption:=IntToStr(YD);
       StxtSS1.Caption:=IntToStr(SS);
    end;procedure TFrmDSHKSZ.SumUp2;
    Var    i,GJB,YD,SS:integer;
    begin
      YD:=0;
      SS:=0;
      GJB:=0;
      for i:=0 to ListView1.Items.Count-1  do
        if  ListView1.Items[i].Checked=True then
        begin
          GJB:=GJB+1;
          YD:=YD+StrToInt(ListView1.Items[i].SubItems[3]);
          SS:=SS+StrToInt(ListView1.Items[i].SubItems[4]);
        end;
       StxtGJB2.Caption:=IntToStr(GJB);
       StxtYD2.Caption:=IntToStr(YD);
       StxtSS2.Caption:=IntToStr(SS);
    end;procedure TFrmDSHKSZ.Button2Click(Sender: TObject);
    begin
      Close;
    end;
    procedure TFrmDSHKSZ.BtnQueryClick(Sender: TObject);
    var
    MyListItem:TListItem;
    i:integer;
    begin
      With ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from 下载代收款收款明细表 where 1=1');
        SQL.Add(' and 已上帐=0 ');
        if  Trim(ComboBoxZX.Text)<>'' then
          SQL.Add(' and 目的地='''+Trim(ComboBoxZX.Text)+'''');
        if Trim(EditSHR.Text)<>'' then
          SQL.Add(' and 收货人 like ''%'+Trim(EditSHR.Text)+'%''');
        if Trim(EditFHR.Text)<>'' then
          SQL.Add(' and 发货人 like ''%'+Trim(EditFHR.Text)+'%''');
        if  Trim(ComboBox1.Text)<>'' then
          SQL.Add(' and 收款日期'+Trim(ComboBox1.Text)+''''+DateToStr(DateTimePicker1.date)+'''');
        SQL.Add(' Order by 目的地,收款日期,收货人,开单日期');
        Open;
        First;
        ListView1.Items.Clear;
        while not eof do
        begin
          MyListItem:=ListView1.Items.Add;
          For i:=0 to 10 do MyListItem.SubItems.Add('');
          MyListItem.Caption:=FieldByName('运单号').AsString;
          MyListItem.SubItems[0]:=FieldByName('收货人').AsString;
          MyListItem.SubItems[1]:=FieldByName('发货人').AsString;
          next;
        end;  end;
    SumUp1;
    end;procedure TFrmDSHKSZ.FormCreate(Sender: TObject);
    begin
      ComboBoxZX.Items:=FrmClient.ComboBoxSZD.Items;
      DateTimePicker1.Date:=date;
    end;procedure TFrmDSHKSZ.ListView1Click(Sender: TObject);
    begin
      SumUp2;
    end;procedure TFrmDSHKSZ.BtnALLClick(Sender: TObject);
    Var i:integer;
    begin
      for i:=0 to ListView1.Items.Count-1  do
        ListView1.Items[i].Checked:=True;
      SumUp2;
    end;procedure TFrmDSHKSZ.BtnNOClick(Sender: TObject);
    Var i:integer;
    begin
      for i:=0 to ListView1.Items.Count-1  do
        ListView1.Items[i].Checked:=False;
      SumUp2;
    end;procedure TFrmDSHKSZ.BtnSZClick(Sender: TObject);
    var
      i:integer;
      Err:Boolean;
      ErrStr,str:string;
      XYD,YYSX,j,CQTS:real;
    begin
      if MessageDlg('您确认要上帐吗?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then   exit;
      i:=0;
      ADOQuery1.First;
      with ADOQuery1 do
      while not eof do
      begin
        Err:=False;
        ErrStr:='';
        if  ListView1.Items[i].Checked<>True then
        begin
          i:=i+1;
          ADOQuery1.Next;
          continue;
        end;
        with ADOQuery2 do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select * from 运单表 where 运单号='''+ListView1.Items[i].Caption+'''');
          Open;
          if not eof then
          begin
              if  (leftStr(FieldByName('货款类型').AsString,4)='垫付')  and   (FieldByName('货款').AsCurrency<>StrToInt(ListView1.Items[i].SubItems[4]))  then      //垫付的不能扣款
              begin
                Err:=True;
                ErrStr:=ErrStr+'垫付被扣款 ';
              end;
              if Err then
              begin
                i:=i+1;
                if  FieldByName('货款').AsCurrency>0 then  //0货款不登记错误
                begin
                  ADOQuery1.edit;
                  ADOQuery1.FieldByName('错误标志').AsBoolean:=True;
                  ADOQuery1.FieldByName('错误原因').AsString:=ErrStr;
                  ADOQuery1.Post;
                end;
                ADOQuery1.Next;
                continue;
              end;          edit;
              FieldByName('代收款备注').AsString:=FieldByName('代收款备注').AsString+ListView1.Items[i].SubItems[8];          if (leftStr(FieldByName('货款类型').AsString,4)='垫付') and (FieldByName('货款').AsCurrency>0) then
              begin
                 CQTS:=0;  //计算每张运单的信用度.
                 XYD:=0;
                 j:=0;
                 CQTS:=ADOQuery1.FieldByName('收款日期').AsDateTime-Fieldbyname('开单日期').AsDateTime -Fieldbyname('垫付天数').AsInteger;
                 XYD :=(1-(CQTS / 25)) * 100;
                 if XYD<0 then
                   XYD:=0;
                 if XYD>100 then
                   XYD:=100;               
                 ADOQuery2.FieldByName('信用度').AsCurrency:=XYD;
                   
                 with ADOQuery4 do  //客户表中存入:已用授信.
                 begin
                    close;
                    sql.Clear ;
                    sql.add('select * from 客户表 where 1=1');
                    sql.add('and 所在地='''+ADOQuery1.FieldByName('目的地').AsString+'''');
                    sql.add('and 联系人='''+ADOQuery1.FieldByName('收货人').AsString+'''');
                    open;
                    first;
                    if not eof then
                    begin
                      YYSX:=0;
                      YYSX:=Fieldbyname('已用授信').AsCurrency;
                      edit;
                      Fieldbyname('已用授信').AsCurrency :=YYSX-ADOQuery1.FieldByName('原单金额').AsCurrency;
                      post;
                    end;
                 end;
              end;
              post;          ADOQuery1.edit;
              ADOQuery1.FieldByName('已上帐').AsBoolean:=True;
              ADOQuery1.FieldByName('上帐日期').AsDateTime:=date;
              ADOQuery1.Post;
           end;
          i:=i+1;
          ADOQuery1.Next;
        end;
      end;
      BtnQueryClick(Sender);
    end;procedure TFrmDSHKSZ.Button1Click(Sender: TObject);
    var
    MyListItem:TListItem;
    i:integer;
    begin
      With ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from 下载代收款收款明细表 where 1=1');
        SQL.Add('  and 已上帐=0');
        SQL.Add('  and 错误标志=1');
        if  Trim(ComboBoxZX.Text)<>'' then
          SQL.Add(' and 目的地='''+Trim(ComboBoxZX.Text)+'''');
        if Trim(EditSHR.Text)<>'' then
          SQL.Add(' and 收货人 like ''%'+Trim(EditSHR.Text)+'%''');
        if Trim(EditFHR.Text)<>'' then
          SQL.Add(' and 发货人 like ''%'+Trim(EditFHR.Text)+'%''');
        SQL.Add(' Order by 目的地,收货人,开单日期'); 
        Open;
        First;
        ListView1.Items.Clear;
        while not eof do
        begin
          MyListItem:=ListView1.Items.Add;
          For i:=0 to 10 do MyListItem.SubItems.Add('');
          MyListItem.Caption:=FieldByName('运单号').AsString;
          MyListItem.SubItems[0]:=FieldByName('收货人').AsString;
          next;
        end;  end;
    SumUp1;
    end;
      

  2.   


    procedure TFrmDSHKSZ.Button5Click(Sender: TObject);
    var i:integer;
    begin
      if MessageDlg('您确认要删除吗?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then   exit;
      i:=0;
      with ADOQuery1 do
      begin
        First;
        while not Eof do
        begin
          if  (ListView1.Items[i].Checked=True)  then
          begin
            edit;
            FieldByName('已上帐').AsBoolean:=True;
            post;
           end;
          i:=i+1;
          next;
        end;
      end;
      Button1Click(Sender);
    end;procedure TFrmDSHKSZ.Button3Click(Sender: TObject);
    var i,k:integer;
    begin                                                                         
      if MessageDlg('您确认要止付该厂家吗?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then   exit;
      i:=0;
      k:=0;
      with ADOQuery1 do
      begin
        First;
        while not Eof do
        begin
          if  (ListView1.Items[i].Checked=True) and (FieldByName('错误标志').AsBoolean=True)  and (Pos('垫付被扣款',FieldByName('错误原因').AsString)>0)    then
          begin
            with ADOQuery3 do
            begin
              CLose;
              SQL.Clear;
              SQL.Add('select * from 停止付款厂家表 where 厂家='''+ListView1.Items[i].SubItems[1]+'''');
              SQL.Add(' and 有效标志=1') ;
              Open;
              if not eof then
              begin
                edit;
                FieldByName('原因').AsString:=FieldByName('原因').AsString+' '+'要扣回'+ListView1.Items[i].SubItems[0]+'扣款'+FloatToStr(StrToFloat(ListView1.Items[i].SubItems[3])-StrToFloat(ListView1.Items[i].SubItems[4]))+'元 ';
                post;
                k:=k+1;
              end
              else begin
                CLose;
                SQL.Clear;
                SQL.Add('select top 1 * from 停止付款厂家表 where 1=1');
                SQL.Add(' and 有效标志=0') ;
                Open;
                if not eof then  edit
                else    Append;
                FieldByName('厂家').AsString:=ListView1.Items[i].SubItems[1];
                FieldByName('原因').AsString:=' 要扣回'+ListView1.Items[i].SubItems[0]+'扣款'+FloatToStr(StrToFloat(ListView1.Items[i].SubItems[3])-StrToFloat(ListView1.Items[i].SubItems[4]))+'元 ';
                FieldByName('有效标志').AsBoolean:=True;
                Post;
                k:=k+1;
              end;
            end;
          end;
          edit;
          FieldByName('已注明止付').AsBoolean:=True;
          post;
          i:=i+1;
          next;
        end;
      end;
      showMessage('已将'+IntToStr(k)+'个厂家添加到 停止付款厂家表!');
    end;procedure TFrmDSHKSZ.Button4Click(Sender: TObject);
    var
      i:integer;
      YYSX,j,CQTS:real;
      str:string;
      XYD:real;
    begin
      if MessageDlg('您确认上帐吗?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then   exit;
      i:=0;
      with ADOQuery1 do
      begin
        First;
        while not Eof do
        begin
          if  (ListView1.Items[i].Checked=True)  and (ListView1.Items[i].SubItems[7]='可付') and (FieldByName('错误标志').AsBoolean=True) and (StrToFloat(ListView1.Items[i].SubItems[3])>StrToFloat(ListView1.Items[i].SubItems[4]))  then
          begin
           with ADOQuery3 do
           begin
            ADOQuery3.Close;
            ADOQuery3.SQL.Clear;
            ADOQuery3.SQL.Add('select * from 运单表 where 运单号='''+ListView1.Items[i].Caption+'''');
            open;
    //        if ADOQuery3.fieldByName('付款标志').AsString='垫付' then
            begin
              edit;
                // ...///....................
              post;
              end;
              if FieldByName('上单日期').AsString='' then
              begin
                edit;
                FieldByName('上单日期').AsDateTime:=Date();
                Post;
              end;          if (leftStr(FieldByName('货款类型').AsString,4)='垫付') and (FieldByName('货款').AsCurrency>0) then
              begin
                 CQTS:=0;  //计算每张运单的信用度.
                 XYD:=0;
                 j:=0;
                 CQTS:=ADOQuery1.FieldByName('收款日期').AsDateTime-Fieldbyname('开单日期').AsDateTime -Fieldbyname('垫付天数').AsInteger;
                 XYD :=(1-(CQTS / 25)) * 100;
                 if XYD<0 then
                   XYD:=0;
                 if XYD>100 then
                   XYD:=100;
                 ADOQuery3.Edit;
                 ADOQuery3.FieldByName('信用度').AsCurrency:=XYD;
                 ADOQuery3.Post ;
                   
                 with ADOQuery4 do  //客户表中存入:已用授信.
                 begin
                    close;
                    sql.Clear ;
                    sql.add('select * from 客户表 where 1=1');
                    sql.add('and 所在地='''+ADOQuery1.FieldByName('目的地').AsString+'''');
                    sql.add('and 联系人='''+ADOQuery1.FieldByName('收货人').AsString+'''');
                    open;
                    first;
                    if not eof then
                    begin
                      YYSX:=0;
                      YYSX:=Fieldbyname('已用授信').AsCurrency;
                      edit;
                      Fieldbyname('已用授信').AsCurrency :=YYSX-ADOQuery1.FieldByName('原单金额').AsCurrency;
                      post;
                    end;
                 end;
              end;          ADOQuery1.edit;
              ADOQuery1.FieldByName('已上帐').AsBoolean:=True;
              ADOQuery1.FieldByName('错误标志').AsBoolean:=False;
              ADOQuery1.FieldByName('上帐日期').AsDateTime:=date;
              ADOQuery1.Post;
            end;
           end;
          end;
          i:=i+1;
          next;
        end;
      end;
      Button1Click(Sender);
      

  3.   

    DELPHI引用控件StringGrid,如何进行[删除,修改]