Windows フォーム DataGridView コントロールにおける新規レコード行の使用

アプリケーションでデータを編集するために DataGridView を使用するとき、データ ストアに新しいデータ行を追加する機能をユーザーに提供することが必要になる場合がよくあります。 DataGridView コントロールによるこの機能のサポートは、新しいレコードの行を提供することによって行われます。それは常に最後の行として表示されます。 行ヘッダーにアスタリスク (*) 記号が付いています。 以下のセクションでは、新しいレコードの行を有効にしてプログラミングを行うときに考慮する必要があるいくつかのことについて説明します。

新しいレコードの行を表示する

新しいレコードの行を表示するかどうかを指定するには、AllowUserToAddRows プロパティを使用します。 このプロパティの既定値は true です。

データがバインドされている場合、コントロールの AllowUserToAddRows プロパティとデータ ソースの IBindingList.AllowNew プロパティが両方とも true の場合、新しいレコードの行が表示されます。 どちらかが false の場合、行は表示されません。

新しいレコードの行に既定のデータを設定する

ユーザーが新しいレコードの行を現在の行として選択すると、DataGridView コントロールによって DefaultValuesNeeded イベントが生成されます。

このイベントを利用して、新しい DataGridViewRow にアクセスし、新しい行に既定のデータを設定できます。 詳細については、「方法: Windows フォーム DataGridView コントロールの新しい行に既定値を指定する」を参照してください

Rows コレクション

新しいレコードの行は DataGridView コントロールの Rows コレクションに格納されますが、2 つの点で動作が異なります。

  • プログラムで新しいレコードの行を Rows コレクションから削除することはできません。 これを行おうとすると、InvalidOperationException がスローされます。 また、ユーザーも新しいレコードの行を削除することはできません。 DataGridViewRowCollection.Clear メソッドにより、この行が Rows コレクションから削除されることはありません。

  • 新しいレコードの行の後に、行を追加することはできません。 これを行おうとすると、InvalidOperationException が生成されます。 結果として、新しいレコードの行は常に DataGridView コントロールの最後の行になります。 新しいレコードの行が存在する場合、行を追加する DataGridViewRowCollection のメソッド (AddAddCopyAddCopies) のすべてにおいて、挿入メソッドが内部的に呼び出されます。

新しいレコードの行の表示のカスタマイズ

新しいレコードの行が作成されるときは、RowTemplate プロパティによって指定されている行に基づきます。 この行に対して指定されていないセル スタイルは、他のプロパティから継承されます。 セル スタイルの継承の詳細については、「Windows フォーム DataGridView コントロールでのセルのスタイル」を参照してください。

新しいレコードの行のセルによって表示される初期値は、各セルの DefaultNewRowValue プロパティから取得されます。 DataGridViewImageCell 型のセルの場合は、このプロパティからプレースホルダー画像が返されます。 それ以外の場合は、null を返します。 このプロパティをオーバーライドして、カスタム値を返すことができます。 ただし、新しいレコードの行にフォーカスが移動した時点で、DefaultValuesNeeded イベント ハンドラーにより、これらの初期値を置き換えることができます。

この行のヘッダーの標準アイコン (矢印またはアスタリスク) は、一般公開されていません。 アイコンをカスタマイズする場合は、カスタム DataGridViewRowHeaderCell クラスを作成する必要があります。

標準アイコンでは、行ヘッダー セルによって使用されている DataGridViewCellStyleForeColor プロパティが使用されます。 完全に表示するのに十分なスペースがない場合、標準アイコンはレンダリングされません。

行ヘッダー セルに文字列値が設定されていて、テキストとアイコンの両方に十分なスペースがない場合は、最初にアイコンが削除されます。

並べ替え

非バインド モードでは、ユーザーが DataGridView の内容を並べ替えた場合でも、DataGridView の末尾に新しいレコードが常に追加されます。 行を正しい位置に並べ替えるには、ユーザーは並べ替えを再度適用する必要があります。この動作は、ListView コントロールのものと似ています。

データ バインド モードと仮想モードでは、並べ替えが適用されるときの挿入動作は、データ モデルの実装に依存します。 ADO.NET の場合、行は正しい位置にすぐに並べ替えられます。

新しいレコードの行に関するその他の注意事項

この行の Visible プロパティを false に設定することはできません。 これを行おうとすると、InvalidOperationException が生成されます。

新しいレコードの行は、常に、選択されていない状態で作成されます。

仮想モード

仮想モードを実装する場合は、データ モデルで新しいレコードの行が必要なタイミング、および行の追加をロールバックするタイミングを、追跡する必要があります。 この機能の正確な実装は、データ モデルの実装と、そのトランザクション セマンティクス (たとえば、コミット スコープがセル レベルか行レベルか) によって異なります。 詳細については、「Windows フォーム DataGridView コントロールでの仮想モード」を参照してください。

関連項目