質問

データベーステーブルの選択された選択された行を覚えていることを覚えています。 アプリケーションが閉じた前に使用(選択)し、次にそれをロードする(選択した) アプリケーションの起動テーブルには4つのレコードしかありません。また、誰かが心配する必要はない 何でも変化させようとします。 今私は使用します:

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin
  Clientdataset1.DisableControls;
  try
    cxGrid1DBTableView1.DataController.KeyFieldNames := 'ID';
    cxGrid1DBTableView1.DataController.LocateByKey('4');
  finally
    Clientdataset1.EnableControls;
  end;
end;
.

しかしこれは難しいです。柔軟に望んでいます。 これらの設定を保存する方法Application.exeフォルダにあるINIファイルに保存できますか アプリケーションが起動するときにそれらをロードしますか?だから、たとえば、キーが「3」の場合 (アプリが終了したとき)私は次回それをロードします。

役に立ちましたか?

解決

TDataSet.OnAfterOpenイベントとTDataSet.OnBeforeCloseイベントを使用して、目的の値をロードして保存します。

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
var
  LIni : TIniFile;
begin
  DataSet.DisableControls;
  try
    LIni := TIniFile.Create( '<YourIniFileName.ini>' );
    try
      DataSet.Locate( 'ID', LIni.ReadString( 'MyDataSet', 'ID', '' ), [] );
    finally
      LIni.Free;
    end;
  finally
    DataSet.EnableControls;
  end;
end;

procedure TForm3.ClientDataSet1BeforeClose(DataSet: TDataSet);
var
  LIni : TIniFile;
begin
  LIni := TIniFile.Create( '<YourIniFileName.ini>' );
  try
    LIni.WriteString( 'MyDataSet', 'ID', DataSet.FieldByName( 'ID' ).AsString ) );
  finally
    LIni.Free;
  end;
end;
.

これは非常に sight 直前のサンプルであり、実際のアプリケーションでこれを実装してはいけません。

実際のアプリケーションでは、このようなアプリケーション値を読み書きするのを考慮したシングルトンにこれを委任する

// Very simple KeyValue-Store
IKeyValueStore = interface
  function GetValue( const Key : string; const Default : string ) : string;
  procedure SetValue( const Key : string; const Value : string );
end;

// Global Application Value Store as Singleton   
function AppGlobalStore : IKeyValueStore;
.

そしてあなたに非常にスマートな解決策を与えます

procedure TForm3.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin
  DataSet.DisableControls;
  try
    DataSet.Locate( 'ID', AppGlobalStore.GetValue( 'MyDataSet\ID', '' ), [] );
  finally
    DataSet.EnableControls;
  end;
end;

procedure TForm3.ClientDataSet1BeforeClose(DataSet: TDataSet);
begin
  AppGlobalStore.SetValue( 'MyDataSet\ID', DataSet.FieldByName( 'ID' ).AsString ), [] );
end;
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top