⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gridmodedemomain.pas

📁 DevExpress ExpressQuantumGrid Suite v5.9 Full Source
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      BeginUpdate;
      SetLength(ASortArray, SortedItemCount);
      for I := 0 to SortedItemCount - 1 do
      begin
        AFieldName := TcxGridDBColumn(SortedItems[I]).DataBinding.FieldName;
        if SortedItems[I].SortOrder = soAscending then
          AOrder := ' ASC, '
        else
          AOrder := ' DESC, ';
        ASortArray[SortedItems[I].SortIndex] := AFieldName + AOrder;
      end;
      ApplySortToQuery(
        TQuery(TcxGridDBDataController(DataController).DataSet), ASortArray);
    finally
      EndUpdate;
    end;
  end;
var
 AGridView: TcxCustomGridTableView;
begin
  try
    Screen.Cursor := crHourGlass;
    AGridView := TcxGridDBDataController(Sender).GridView;
    if AGridView.IsMaster or AGridView.IsPattern then
      SortPattern
    else
      SortClone;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TGridModeDemoMainForm.tvOrdersDataControllerSummaryAfterSummary(
  ASender: TcxDataSummary);
  function SummaryKindToStr(AKind: TcxSummaryKind): string;
  begin
    case AKind of
      skSum:
        Result := 'SUM';
      skMin:
        Result := 'MIN';
      skMax:
        Result := 'MAX';
      skCount:
        Result := 'Count';
      skAverage:
        Result := 'AVG';
    else
      Result := ''
    end;
  end;
var
  I: Integer;
  AStr, AFieldName: string;
  ADataController: TcxGridDBDataController;
  AView: TcxGridDBTableView;
begin
  ADataController := TcxGridDBDataController(ASender.DataController);
  AView := TcxGridDBTableView(ADataController.GridView);
  if not AView.IsPattern and ADataController.dataSet.Active then
    with GridModeDemoDataDM do
      try
        Screen.Cursor := crHourGlass;
        AStr := 'Select ';
        for I := 0 to ASender.FooterSummaryItems.Count - 1 do
        begin
          AFieldName :=
            TcxGridDBTableSummaryItem(ASender.FooterSummaryItems[I]).FieldName;
          AStr := AStr + SummaryKindToStr(ASender.FooterSummaryItems[I].Kind)+
            '(' + AFieldName + '), ';
        end;
        Delete(AStr, Length(AStr)-1, 2);
        if not Assigned(ADataController.DataSet) then exit;
        if (ADataController.DataSet.State = dsBrowse) and
         TQuery(ADataController.DataSet).UpdatesPending then
          TQuery(ADataController.DataSet).ApplyUpdates;
        AStr := AStr + ' From ' + GetTableNameByDataSet(ADataController.DataSet);
        qryHelper.SQL.Clear;
        qryHelper.SQL.Add(AStr);
        qryHelper.SQL.Add(GetSQLCondition(AView, True));
        qryHelper.Open;
        qryHelper.First;
        for I := 0 to ASender.FooterSummaryItems.Count - 1 do
          ASender.FooterSummaryValues[I] := qryHelper.Fields[I].Value;
        qryHelper.Close;
      finally
        Screen.Cursor := crDefault;
      end;
end;

procedure TGridModeDemoMainForm.btnPopulateClick(Sender: TObject);
begin
  if MessageDlg('This operation will take some time, continue?',
    mtWarning, [mbYES,mbNO], 0) = mrYes then
  begin
    tblOrdersPopulate;
    btnPopulate.Enabled := False;
  end;
end;

procedure TGridModeDemoMainForm.tblOrdersPopulate;
  procedure FillList(AList: TList; ADataSet: TDataSet; AKeyFieldName: string);
  var
    ABookmark: TBookmarkStr;
    AKeyValue: Integer;
  begin
    try
      ADataSet.DisableControls;
      ABookmark := ADataSet.Bookmark;
      ADataSet.First;
      while not ADataSet.Eof do
      begin
        AKeyValue := Integer(ADataSet.FindField(AKeyFieldName).Value);
        AList.Add(TObject(AKeyValue));
        ADataSet.Next;
      end;
    finally
      ADataSet.Bookmark := ABookmark;
      ADataSet.EnableControls;
    end;
  end;
const APaymentTypes: array[0..3] of string = ('AmEx','Cash','Visa','Master');
var
  ACarList, ACustomersList: TList;
  I, ARecordNo: Integer;
  ADateTime: TDateTime;
begin
  ACarList := TList.Create;
  ACustomersList := TList.Create;
  with GridModeDemoDataDM do
  begin
    FillList(ACarList, qryCars, 'ID');
    FillList(ACustomersList, qryCustomers, 'ID');
    try
      Screen.Cursor := crHourGlass;
      qryOrders.DisableControls;
      qryOrders.Close;
      qryHelper.SQL.Clear;
      qryHelper.SQL.Add('Select * from orders');
      qryHelper.Open;
      qryHelper.Last;
      FStartIDValue := qryHelper.FindField('ID').Value;
      ADateTime := Date;
      Randomize;
      pnlProgress.Visible := True;
      Application.ProcessMessages;
      for I := 0 to 100000 do
      begin
        if (I > 0) and (I mod 100 = 0) then
          ProgressBar.StepIt;
        qryHelper.Append;
        ARecordNo := Random(ACustomersList.Count);
        qryHelper.FindField('CustomerID').Value :=
          Integer(ACustomersList[ARecordNo]);
        ARecordNo := Random(ACarList.Count);
        qryHelper.FindField('ProductID').Value := Integer(ACarList[ARecordNo]);
        qryHelper.FindField('PurchaseDate').Value := ADateTime - Random(1095);
        qryHelper.FindField('PaymentType').Value := APaymentTypes[Random(4)];
        qryHelper.FindField('PaymentAmount').Value := 20000 + Random(500000);
        qryHelper.Post;
      end;
      pnlProgress.Visible := False;
    finally
      FEndIDValue := qryHelper.FindField('ID').Value;
      qryHelper.Close;
      qryOrders.Open;
      qryOrders.EnableControls;
      Screen.Cursor := crDefault;
    end;
  end;
end;

function TGridModeDemoMainForm.GetSQLCondition(
  AView: TcxGridDBTableView; AAddFilter: Boolean): string;
var
  AFieldName, AMasterKeyFieldName: string;
  AMasterGridView: TcxGridDBTableView;
  ADataController: TcxGridDBDataController;
  AMasterDataSet: TDataSet;
  AMasterKeyValue: Variant;
  AStr: string;
begin
  Result := '';
  AStr := 'where ';
  ADataController := AView.DataController;
  if AView.IsDetail then
  begin
    AStr := ' and ';
    AFieldName := ADataController.DetailKeyFieldNames;
    AMasterKeyFieldName := ADataController.MasterKeyFieldNames;
    AMasterGridView := TcxGridDBTableView(AView.MasterGridView);
    AMasterDataSet := AMasterGridView.DataController.DataSet;
    AMasterKeyValue := AMasterDataSet.FindField(AMasterKeyFieldName).Value;
    Result := 'where ' + AFieldName + ' = ' + VarToStr(AMasterKeyValue);
  end;
  if AAddFilter and not ADataController.Filter.IsEmpty and ADataController.Filter.Active then
  begin
    Result := Result + AStr + ADataController.Filter.FilterText;
  end;
end;

procedure TGridModeDemoMainForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if FStartIDValue <> FEndIDValue then
    with GridModeDemoDataDM do
    begin
      if not (MessageDlg('Do you want to delete previously inserted records?',
        mtConfirmation, [mbYes,mbNo], 0) = mrYes) then Exit;
      GridModeDemoTerminateForm.lbDesc.Caption := strDeleting;
      GridModeDemoTerminateForm.Show;
      try
        Screen.Cursor := crHourGlass;
        Application.ProcessMessages;
        qryHelper.SQL.Clear;
        qryHelper.SQL.Add('delete from Orders ');
        qryHelper.SQL.Add('where ID > ' + IntToStr(FStartIDValue));
        qryHelper.SQL.Add('and ID <= ' + IntToStr(FEndIDValue));
        qryHelper.ExecSQL;
      finally
        GridModeDemoTerminateForm.Close;
        Screen.Cursor := crDefault;
      end;
    end;
end;

procedure TGridModeDemoMainForm.FormCreate(Sender: TObject);
begin
  try
    GridModeDemoTerminateForm := TGridModeDemoTerminateForm.Create(nil);
    GridModeDemoTerminateForm.lbDesc.Caption := strLoadData;
    GridModeDemoTerminateForm.Show;
    Application.ProcessMessages;
    CopyDBToLocalPlace(False);
    OpenTables(True);
    InitPopulateButton;
  finally
    GridModeDemoTerminateForm.Close;
  end;
end;

procedure TGridModeDemoMainForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  FreeAndNil(GridModeDemoTerminateForm);
end;

procedure TGridModeDemoMainForm.OpenTables(AOpen: Boolean);
begin
  with GridModeDemoDataDM do
    try
      Screen.Cursor := crHourGlass;
      DataBase.Connected := False;
      qryCars.Active := AOpen;
      qryOrders.Active := AOpen;
      qryCustomers.Active := AOpen;
    finally
      Screen.Cursor := crDefault;
    end;
end;

procedure TGridModeDemoMainForm.CopyDBToLocalPlace(ARewrite: Boolean);
  function CopyTableToCurrentDir(ATableName: string): Boolean;
   var
     ASearchRec: TSearchRec;
  begin
    Result := False;
    if FindFirst(DataPath + ATableName + '.*', faAnyFile, ASearchRec) = 0 then
    begin
      Result :=
        CopyFile(PChar(DataPath + ASearchRec.Name),
          PChar(ASearchRec.Name), False);
      while FindNext(ASearchRec) = 0 do
        Result := Result and
          CopyFile(PChar(DataPath + ASearchRec.Name),
            PChar(ASearchRec.Name), False);
      FindClose(ASearchRec);
    end;
  end;

var
 I: Integer;
 AEnablePopulate: Boolean;
begin
  try
    Screen.Cursor := crHourGlass;
    OpenTables(False);
    AEnablePopulate := True;
    for I := Low(CarsTableNames) to High(CarsTableNames) do
      if ARewrite or not FileExists(CarsTableNames[I] + '.DB') then
        AEnablePopulate := AEnablePopulate and
          CopyTableToCurrentDir(CarsTableNames[I]);
  finally
    OpenTables(True);
    Screen.Cursor := crDefault;
  end;
  if AEnablePopulate then
  begin
    btnPopulate.Enabled := True;
    FStartIDValue := 0;
    FEndIDValue := 0;
  end;
end;

procedure TGridModeDemoMainForm.InitPopulateButton;
begin
  with GridModeDemoDataDM do
  begin
    qryHelper.SQL.Clear;
    qryHelper.SQL.Add('Select Count(ID) from Orders');
    qryHelper.Open;
    btnPopulate.Enabled := qryHelper.Fields[0].AsInteger < 100000;
    qryHelper.Close;
  end;
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -