2

TMS の Tdbadvgrid で作業しています。SQLクエリの長​​さに基づいて列を動的に追加しています。列幅の節約を除いて、すべてがうまく機能します。列の追加:

  //Captions
  for i := 0 to oRow.Count - 1 do
  begin
    grdFieldData.Columns.Insert(1);
    grdFieldData.Cells[i + 1, 0] := TabelList.Captions[i].Caption;
  end;

  //Data
  for r := 0 to TabelList.Count - 1 do //rows
  begin
    for c := 0 to oRow.Count - 1 do //cols
    begin
      grdFieldData.Cells[c+1, r+1] := TabelList.Rows[r].Fields[c].Value;
    end;
    if r <> TabelList.Count - 1 then
      grdFieldData.RowCount := grdFieldData.RowCount + 1;
  end;

これで保存機能が TMS TDBAdvGrid に組み込まれ、次のようになります。 ColumnSize オプション

私はすべてのオプションをいじってみましたが、うまくいきませんでした。

テーブルには、1 つの固定行 (キャプション用) と 1 つの空の行があります。固定行の数は行数よりも少なくなければならないため、行はそこにあるだけです。データを.iniファイルまたはレジストリに保存すると、最初の列が保存およびロードされますが、動的に追加された列はデフォルト値(64)として書き込まれますが、ドラッグしてサイズを調整すると保存/ロードされません。.ini ファイル テーブルは次のようになります。

[Recept]
Col0=20
Col1=97
Col2=64
Col3=64
Col4=64
Col5=64
Col6=64
Col7=64
Col8=64
Col9=64
Col10=64
Col11=64
Col12=64
Col13=64
Col14=64

ロードすると、次のようになります。 グリッド

幅が保存されるように、列を適切に保存するために何ができるか知っている人はいますか?

4

1 に答える 1

1

それで、数時間座った後、自分で簡単なものを構築できるのであれば、組み込みの何かにそれほど苦労する理由はないと判断しました.

この例では、選択したディレクトリの選択した ini ファイルに保存するだけです。ファイル名とディレクトリは現在、継承された各クラスにハードコードされています。それらを変更する機能は簡単に実装できます。おそらく、ボタンまたはそのようなものへのディレクトリセレクターでさえ。

読み込み用のコード (FormShow で呼び出されます):

procedure TfrmReceptEditor.LoadColWidths;
var
  Ini: TIniFile;
  i: Integer;
  path: String;
  filename: String;
begin
  inherited;
  path := 'C:\';
  filename := 'grid.ini';
  Ini := TIniFile.Create(path + filename);
  try
    for i := 0 to grdFieldData.ColCount - 1 do
    begin
      grdFieldData.Columns.Items[i].Width := Ini.ReadInteger('Recept','col'+IntToStr(i),75);
    end;
    grdFieldData.FixedColWidth := 20;
  finally
    Ini.Free;
  end
end;

データを保存するためのコード (FormClose で):

procedure TfrmReceptEditor.SaveColWidths;
var
  Ini: TIniFile;
  i: Integer;
  path: String;
  filename: String;
begin
  inherited;
  path := 'C:\';
  filename := 'grid.ini';
  Ini := TIniFile.Create(path + filename);
  try
    for i := 0 to grdFieldData.ColCount - 1 do
    begin
      Ini.WriteInteger('Recept', 'col'+IntToStr(i), grdFieldData.Columns.Items[i].Width);
    end;
  finally
    Ini.Free;
  end;
end;

Ini ファイルが存在するかどうか (つまり、入力したパスが正しいかどうか) をチェックする機能を組み込みたいと思う人もいるかもしれません。ただし、ファイルが存在しない場合でも、ファイルを作成するだけでスムーズに動作します。

于 2016-03-15T07:55:37.637 に答える