行の追加はTStringListの値を使ってみる。
もちろん列数と同じ数でないとダメ。
FireMonkey.h
///FunctionInsert(対象のグリッド,追記する行の値, 差し込む行番号)
void __fastcall FunctionInsert(TStringGrid *var_string_grid,
TStringList *var_input_data, int var_row = 0);
FireMonkey.cpp
void __fastcall TForm1::FunctionInsert(TStringGrid *var_string_grid,
TStringList *var_input_data, int var_row) {
/// 行列の数を確認。
if (var_string_grid->ColumnCount != var_input_data->Count) {
ShowMessage(L"列数と配列が一致しません。");
return;
}
///行を増やす
var_string_grid->RowCount = var_string_grid->RowCount + 1;
///行をずらす
for (int i = var_string_grid->RowCount - 1; i > var_row; i--) {
for (int i2 = 0; i2 < var_string_grid->ColumnCount; i2++) {
var_string_grid->Cells[i2][i] = var_string_grid->Cells[i2][i - 1];
}
}
///挿入行にデータを入れる
for (int i2 = 0; i2 < var_string_grid->ColumnCount; i2++) {
var_string_grid->Cells[i2][var_row] = var_input_data->Strings[i2];
}
}
行削除は、現在選択中の行を削除する方法で。
FireMonkey.h
void __fastcall FunctionDelete(TStringGrid *var_string_grid);
FireMonkey.cpp
void __fastcall TForm1::FunctionDelete(TStringGrid *var_string_grid) {
///選択が無ければ終了
if (var_string_grid->Selected == -1) {
return;
}
///確認
if (MessageDlg(L"本当に削除しますか?", TMsgDlgType::mtWarning,
TMsgDlgButtons() << TMsgDlgBtn::mbOK << TMsgDlgBtn::mbCancel, 0) != 1) {
return;
}
///選択中の行を削除する感じ。
int var_row = var_string_grid->Selected;
///削除の前に選択を解除する。
var_string_grid->Selected = -1;
///削除というか、行を押しつぶす感じ
for (int i = var_row; i < var_string_grid->RowCount - 1; i++) {
for (int i2 = 0; i2 < var_string_grid->ColumnCount; i2++) {
var_string_grid->Cells[i2][i] = var_string_grid->Cells[i2][i + 1];
}
}
///行の数を変更
var_string_grid->RowCount = var_string_grid->RowCount - 1;
}