Dbgrid在多选的状态下怎样判断有哪几行被选中?
gdSelected in State 只能判断当前选中行,不能判断选中了哪几行。

解决方案 »

  1.   

    Delphi 自带的DBGrid不支持多选。多选,可使用第三方控件。或自己继承一个新的DBGrid。
      

  2.   

    var i:integer;
    begin
      for i:=0 to DBGrid1.SelectedRows.Count - 1 do
        begin
         DBGrid1.DataSource.DataSet.GotoBook(Pointer(DBGrid1.SelectedRows.Items[i]));
         ShowMessage(DBGrid1.DataSource.DataSet.Fields[0].AsString);
        end;
    end;
      

  3.   

    前面回帖理解错误,现回帖如下:
    1、设置DBGrid可以多选:
       设置Option中的dgRowSelect为True。2、在DBGrid界面,通过shift+Ctrl+鼠标点击,选中行,选中的行,显示为蓝色。3、选择多行的代码操作: 使用循环,通过判断,找到行列。With DBGrid1.DataSouece.DataSet do
    begin
       First;
       while not Eof do
       begin
         if DBGrid1.SelectedRows.CurrentRowSelected then  // 获得选中行
         begin
           for i := 0 to DbGrid1.Columns.Count - 1 do     // 获得名列
           begin
             DBGrid1.Columns.Items[i].Field.Value         // 获得行列值
           end;
         end; 
         Next;
       end;
    end; 
      

  4.   

    使用SelectedRows和书签 book即可处理
      

  5.   

    用DBGridEh实现比较省事
      

  6.   

    用CXgrid,checkbox
      

  7.   

    使用DBGridEh,将Option里面的dgRowSelect和dgMultiSelect设为true,即可按住ctrl选择多行,但是这样的话不允许修改单元格。
      

  8.   

    下面代码,可以实现:
      if self.DBGridEh1.Selection.SelectionType=gstRectangle then
      self.DBGridEh1.DataSource.DataSet.Book:=dbgridEh1.Selection.Rect.TopRow;  while not self.ADOQuery1.Eof do
      begin    if DBGridEh1.DataSource.Dataset.CompareBooks(TBook(DBGridEh1.Selection.Rect.BottomRow),
                    TBook(DBGridEh1.DataSource.DataSet.Book)) = 0 then Break;
        showMessage(self.ADOQuery1.FieldByName('a0188').Asstring);
        self.ADOQuery1.Next;
      end;  
      

  9.   

    字体变色控制是表格的ONDRAWDATACELL事件中判断SELECTED,然后将GRID的FONT的颜色改变