将DBGRID绑定在QUERY上,再动手将QUERY的SQL动态的修改,
上面再加几个COMBOBOX输入筛选条件。

解决方案 »

  1.   

    当然可以,选中一个就设置加亮,再次选中就去掉。
    selectrow来选中或者去掉选中
    isselect来判断是否选中
      

  2.   

    DBGRID不是有一个ROWSELECT选项啊
    而且还有一个MULTISELECT啊
    在放一个STRINGGRID
    当DBGRID选择上一行后
    输入到STRINGGRID一行
    当选择取消时候
    在STRINGGRID中删除那行
    然后在DELETE时候
    删除全部STRINGGRID中的数据就OK了
      

  3.   

    DbGrid中有一个属性,他的名字叫TSelectedRows。
    TSelectedRows还有许多属性可以用。
    你可以使用他来完成任务。前提设:DBGrid.Options.dbRowSelect := TRUE;
            DBGrid.Options.dbMultiSelect:=TRUE;
      

  4.   

    标准函数:
    //==============================================================================
    //数据安全删除******************************************************************
    //==============================================================================
    function Data_SafeDelete(DataSet: TDataSet; DBGrid: TDBGrid): Boolean;
    var i: integer;//TDBDataSet是TQuery,TTable,TStoredProc的直接父类
    begin
      Result := false;
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //TDBDataSet是TQuery,TTable,TStoredProc的直接父类(两层结构)*******************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      if (DataSet is TDBDataSet) then
      begin
        if DBGrid<>nil//如果是从DBGRid中执行删除
        then try
               for i:=1 to DBGrid.SelectedRows.Count do
               begin//多行选择
                 (DataSet as TDBDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1]));
                 (DataSet as TDBDataSet).Delete;
               end;
             except
               Abort;
             end
        else (DataSet as TDBDataSet).Delete;
        //==========================================================================
        //提交到数据库服务器********************************************************
        //==========================================================================
        if (DataSet as TDBDataSet).Database.InTransaction then (DataSet as TDBDataSet).Database.Rollback;
        (DataSet as TDBDataSet).Database.StartTransaction;//开始提交一个事务
        try
          (DataSet as TDBDataSet).ApplyUpdates;//把缓存中未决的记录写到数据集中
          (DataSet as TDBDataSet).Database.Commit;//把调用StartTransaction以来所有的数据变化都反映到服务器上,与Query_Main.Database.Rollback相反
          Result := true;
        except
          (DataSet as TDBDataSet).CancelUpdates;
          (DataSet as TDBDataSet).Database.Rollback;//把调用StartTransaction以来所有的数据变化都取消,与Query_Main.Database.Commit相反
          Result := false;
        end;
        (DataSet as TDBDataSet).CommitUpdates;
      end
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      //TClientDataSet远程更新(三层结构)********************************************
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      else if (DataSet is TClientDataSet) then
      begin
        if DBGrid<>nil//如果是从DBGRid中执行删除
        then try
               for i:=1 to DBGrid.SelectedRows.Count do
               begin//多行选择
                 (DataSet as TClientDataSet).GotoBook(Pointer(DBGrid.SelectedRows.Items[i-1]));
                 (DataSet as TClientDataSet).Delete;
               end;
             except
               Abort;
             end
        else (DataSet as TClientDataSet).Delete;
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        if (DataSet as TClientDataSet).ApplyUpdates(0)=0 then
        begin
          Result := true;
        end else
        begin
          Result := false;
          Abort;
        end;
      end;
    end;