在stringgrid和dbgrid中,我想对鼠标圈选的多行记录进行操作,比如删除。
 比如:共有100条记录,我随便用鼠标圈选其中的12行,然后点按钮,删除这12行记录,后面的记录挪上来。
最好给出代码。谢谢!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i, j: Integer;
      s: string;
    begin
      if DBGrid1.SelectedRows.Count>0 then
        with DBGrid1.DataSource.DataSet do
          for i:=0 to DBGrid1.SelectedRows.Count-1 do
          begin
            GotoBook(pointer(DBGrid1.SelectedRows.Items[i]));
            for j := 0 to FieldCount-1 do
            begin          if (j>0) then s:=s+', ';
              s:=s+Fields[j].AsString;
            end;
            Listbox1.Items.Add(s);
            s:= '';
          end;
    end;delphi自带的example , 应该对你有所帮助
      

  2.   

    在DBGRID里不用写代码吧?
    只要在对应的数据集里(比如QUERY1)写QUERY1。DELETE就行了,自动上来
      

  3.   

    我再补充一点,这些stringgrid和dbgrid里的记录不是从datasource里得到的,而是别的方法生成的数据,我放到stringgrid和dbgrid里的。stringgird怎么办?
      

  4.   

    好了,stringgird已经找到办法了,
        stringgrid.Selection.top可以得到区域上限;
         stringgrid.Selection.bottom可以得到区域下限;那么dbgrid呢,没有数据源的
      

  5.   

    var
      z: integer;
      i: integer;
      booklist: Tbooklist;
      book: tbookstr;
    begin
          book := Book;
          booklist := dbgrid1.SelectedRows;
          for i := 0 to booklist.Count - 1 do
          begin
            Book := booklist[i];
          end;
    end;
      

  6.   

    这样应该可以实现dbgrid等的多项选择
      

  7.   

    stringgrid的删除
    procedure TForm1.stringgriddelClick(Sender: TObject);
    var
      i,j,s,e:integer;
    begin
      s := stringgrid1.Selection.Top;
      e := stringgrid1.Selection.Bottom;
      for i:=0 to stringgrid1.RowCount-e-2 do
        stringgrid1.Rows[s+i].Assign(stringgrid1.Rows[e+i+1]);
      stringgrid1.RowCount := stringgrid1.RowCount - e + s + 1;
    end;
      

  8.   

    谢谢西门吹雪,不过我开始已经说了,我已经知道怎么删除stringgrid 中的行了,还是谢谢!我想知道,我怎么选择dbgrid中的某些行列。比如:鼠标选择2行5列开始,6行8列结束。然后添加到stringgrid(只有一列) 表格中
      

  9.   

    哦,是我看错了,两个都是stringrid,好了,散分!谢谢大家的回答