我把DBGrig的dgMultiSelect设置为True,大家知道,在dbgrid显出的时候可以用
crl+鼠标进行多行选择。
问题是:怎么样对选中的几行进行事件处理,我想达到:选中的几行变成另外一种颜色?
请高手指教!测试成功,马上给分。

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if( gdSelected in State)then  BEGIN
      DBGRID1.Canvas.Brush.Color := CLRED;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, [gdSelected]);
      END;
    end;
    注意设置options中的dgRowSelected为True;,dgMultiSelect为True,defaultDrawing为False
      

  2.   

    dickeybird888(于伟刚) 不是解决你的问题了吗:
    if( gdSelected in State) then
      

  3.   

    最好添加一个虚字段,显示为checkbox,用checkbox作为选中的标志,然后读取query中需字段的值,在对其做处理
      

  4.   

    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]));//选中的记录
          //……做你的事
          end;
    end;
      

  5.   

    yesxwl() :
     //……做你的事
    我写为:
    adotable1.FieldByName('taxrate').AsString:='2';
    adotable1.Post; 但运行出错:(我用adotable,adoconnection,datasource连接的数据库为:access数据库dbdemos中的customer表)
      

  6.   


    adoTable1.Edit;//加上这句,因为在gotoBookMark后状态已变为Brows
    adotable1.FieldByName('taxrate').AsString:='2';
    adotable1.Post;