DataGridView:新規行に初期値を設定する方法(サンプルあり)

📋 目次(クリックで展開)

DataGridView でユーザーが新しい行を追加してデータを入力する際、特定のセルにあらかじめ決まった初期値(既定値)を自動で入力しておきたい場合があります。たとえば、「登録日」の列に当日の日付を初期表示したり、「数量」の列に初期値として「1」を入力したりするケースです。

DataGridView には、新しく追加される行のセルに対して既定値を設定するための専用のイベントが用意されています。

今回は、DefaultValuesNeeded イベントを利用して、新規行の追加時に各セルへ初期値を自動設定する方法について解説します。

既定値を設定する仕組み

DataGridView で新規行に初期値を設定するには、DefaultValuesNeeded イベントを利用します。

このイベントは、ユーザーがグリッドの最下部にある新規入力行(コミット前の空行)を選択し、文字を入力するなどして新しい行の追加が開始されたタイミングで発生します。イベントハンドラ内では、引数として渡される DataGridViewRowEventArgs から新しく作成された行(Row)にアクセスし、各セルに値を割り当てます。

実装コード

以下は、DataTable をデータソースとしてバインドし、新規行が追加された際に「Date」列へシステム日付(今日の日付)を、「Count」列へ初期値「1」を自動的に設定するコード例です。

Form1.cs
using System.Data;
namespace DataGridView_DefaultValues;
public partial class Form1 : Form
{
private DataTable _dataTable = new DataTable();
public Form1()
{
InitializeComponent();
InitializeDataGridView();
}
private void InitializeDataGridView()
{
// テスト用データの準備
_dataTable.Columns.Add("Code", typeof(string));
_dataTable.Columns.Add("Name", typeof(string));
_dataTable.Columns.Add("Count", typeof(int));
_dataTable.Columns.Add("Date", typeof(string));
_dataTable.Rows.Add("P001", "ノートパソコン", 1, "2026/06/01");
dataGridView1.DataSource = _dataTable;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
// 既定値設定用のイベントを購読
dataGridView1.DefaultValuesNeeded += DataGridView1_DefaultValuesNeeded;
}
/// <summary>
/// 新しい行の既定値を設定するイベント
/// </summary>
private void DataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
// 新規追加された行の「Count」列に初期値 1 を設定
if (dataGridView1.Columns["Count"] != null)
{
e.Row.Cells["Count"].Value = 1;
}
// 新規追加された行の「Date」列に本日の日付(yyyy/MM/dd形式)を設定
if (dataGridView1.Columns["Date"] != null)
{
e.Row.Cells["Date"].Value = DateTime.Today.ToString("yyyy/MM/dd");
}
}
}

サンプルアプリケーション

DataGridView_AddNewRow_Default_Value.zip

※ サンプルアプリケーションは、.NET 10 をターゲットに作成しています。

実行結果

新規行をクリックして編集を開始すると、「Count」列に 1 が、「Date」列に今日の日付が、それぞれ自動的に設定されます。

留意すべき注意点と実装の背景

新規行の既定値設定を扱う際、動作の仕様やデータバインド環境での特性を把握しておくとよい点が2つあります。

イベントが発生するタイミング

DefaultValuesNeeded イベントが発生するのは、「新しい行の編集が開始された瞬間」です。画面が表示された直後の段階では、最下行の空行(新規入力行)に値は表示されません。

ユーザーがその行のいずれかのセルに入力を開始したタイミング、あるいはコードから行が追加されたタイミングでイベントが呼び出され、値がセルに反映されます。あらかじめ何も操作していない空行の状態から初期値を表示させておきたい場合は、イベントによる制御ではなく、データソース側の定義などで初期値を制御するアプローチが必要になります。

データバインドを行っている場合の選択肢

DataTable などのデータソースを DataGridView にバインドしている場合、グリッド側のイベント(DefaultValuesNeeded)を使わずに、DataTable 側のプロパティで既定値を設定する方法もあります。

// DataTableの列定義で既定値を設定する例
_dataTable.Columns["Count"].DefaultValue = 1;

データソース側で DefaultValue を設定しておくと、DataGridView に新規行が追加された際にもその値が自動的に引き継がれます。「常に固定の値を設定する」といった単純な要件であれば DataTable 側での設定が簡潔です。

一方で、「現在のシステム日付」や「ログイン中のユーザー名」のように、画面の状況や実行時のタイミングに応じて動的に初期値を変えたい場合は、今回紹介した DefaultValuesNeeded イベントを利用してコード側でその都度計算して設定する方法が適しています。要件に応じて選択してください。

まとめ

今回は、DataGridView に新しく追加される行のセルに既定値を指定する方法について解説しました。DefaultValuesNeeded イベントを利用することで、新規行が作成されるタイミングで動的に初期値を割り当てることができます。

  • DefaultValuesNeeded イベントハンドラ内で e.Row.Cells を経由して値を設定する
  • ユーザーが入力を開始したタイミングで値が適用される仕様を理解しておく
  • 固定値であればデータソース側の DefaultValue、動的な値であればイベントによる制御を使い分ける

これらの手順を整えることで、ユーザーの入力の手間を省き、入力漏れや初期データの不整合を防ぐ一覧画面の構築が可能になります。新規行の入力制御を実装する際の参考になりましたら幸いです。


💬 コメント