C++BuilderでTJvStringGridを使ってみる。

C++BuilderでTJvStringGridを使ってみる。

TJvStringGridは、セルの文字揃えやソート、CSVファイルの保存や読み込みの機能を拡張したグリッドです。

※TJvStringGridはJVCLのコンポーネントです。JVCLをインストールすると使用できるようになります。

■文字揃えを設定する

OnGetCellAlignmentイベントで引数CellAlignmentに文字の揃え方を指定します。

void __fastcall TForm1::JvStringGrid1GetCellAlignment(TJvStringGrid *Sender, int AColumn,
          int ARow, TGridDrawState State, TAlignment &CellAlignment)
{
  switch (AColumn) {
  case 1:
    CellAlignment = taLeftJustify; //左寄せ
    break;
  case 2:
    CellAlignment = taRightJustify; //右寄せ
    break;
  case 3:
    CellAlignment = taCenter; //中央寄せ
    break;
  }
}

■入力方法を設定する

OnGetEditStyleイベントで引数EditStyleに入力方法を指定します。

esPickList(コンボボックス)のときは、選択肢をPickListStringsに設定します。

esEllipsis(ボタン)のとき、ボタンが押されるとOnEditButtonClickイベントが発生します。

//セルの内容を編集可能にする
JvStringGrid1->Options << goEditing;

void __fastcall TForm1::JvStringGrid1GetEditStyle(TJvStringGrid *Sender, int AColumn,
          int ARow, TStrings *PickListStrings, TEditStyle &EditStyle)
{
  switch (AColumn) {
  case 1:
    EditStyle = esSimple;
    break;
  case 2:
    EditStyle = esEllipsis;
    break;
  case 3:
    EditStyle = esPickList;
    PickListStrings->Add("選択肢1");
    PickListStrings->Add("選択肢2");
    PickListStrings->Add("選択肢3");
    break;
  }
}
void __fastcall TForm1::JvStringGrid1EditButtonClick(TObject *Sender)
{
  MessageDlg("ボタンが押されました。", mtWarning, TMsgDlgButtons() << mbOK, 0);
}

■編集できるセルを限定する

セルが編集される時にOnShowEditorイベントが発生します。
引数AllowEditにfalseを指定すると、セルを編集できなくなります。

//セルの内容を編集可能にする
JvStringGrid1->Options << goEditing;

void __fastcall TForm1::JvStringGrid1ShowEditor(TJvStringGrid *Sender, int ACol, int ARow,
          bool &AllowEdit)
{
  AllowEdit = (ACol == 1 && ARow == 1);
}

■CSVファイルに保存する

SaveToCSVメソッドを呼ぶとグリッドのデータをCSVファイルに保存することができます。

第1引数に保存するファイルのファイル名、第2引数に区切り文字、第3引数に引用符を指定します。

JvStringGrid1->SaveToCSV("C:\\test.csv", ',');

保存処理中はOnSaveProgressイベントで処理の進行具合を知ることができます。

void __fastcall TForm1::JvStringGrid1SaveProgress(TObject *Sender, int Progression,
          int Total)
{
  ProgressBar1->Position = Progression;
}

■CSVファイルから読み込む

LoadFromCSVメソッドを呼ぶとCSVファイルのデータをグリッドに読み込むことができます。

第1引数に保存するファイルのファイル名、第2引数に区切り文字、第3引数に引用符を取り除くかを指定します。

JvStringGrid1->LoadFromCSV("C:\\test.csv", ',');

読み込み処理中はOnLoadProgressイベントで処理の進行具合を知ることができます。

void __fastcall TForm1::JvStringGrid1LoadProgress(TObject *Sender, int Progression,
          int Total)
{
  ProgressBar1->Position = Progression;
}

■ソートする

SortGridメソッドはグリッドのデータをソートします。

SortGridメソッドの引数は次のようになっています。

  1. Column ソートに使用する列

  2. Ascending ソート順

  3. Fixed 固定行をソート対象に含めるか

    enum TJvSortType { 
      stNone, 
      stAutomatic, 
      stClassic, 
      stCaseSensitive, 
      stNumeric, 
      stDate, 
      stCurrency 
    };
    
  4. SortType 比較方法

  5. BlankTop ソートする前に空のセルを移動するか

実行例

//小さい順にソートする
JvStringGrid1->SortGrid(2, true);

//大きい順にソートする
JvStringGrid1->SortGrid(2, false);

//固定行もソートする
JvStringGrid1->SortGrid(2, false, true);

//数値として比較する
JvStringGrid1->SortGrid(2, true, false, stNumeric);

■参考リンク

コメント

  1. Pingback: prog » StringGrid に CheckBox を。。C++Builder XE2

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください