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

更新 : 2007 年 11 月

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

新規レコード行の表示

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

データがバインドされている場合、コントロールの AllowUserToAddRows プロパティとデータ ソースの IBindingList.AllowNew プロパティが共に true であると、新規レコード行が表示されます。これらのプロパティのいずれかが false の場合、行は表示されません。

新規レコード行への既定のデータの読み込み

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

このイベントは新しい DataGridViewRow へのアクセスを可能にし、新しい行に既定のデータを読み込むことができるようにします。詳細については、「方法 : Windows フォーム DataGridView コントロールの新しい行に既定値を指定する」を参照してください。

行コレクション

新規レコード行は、DataGridView コントロールの Rows コレクションに含まれますが、次の 2 つの点で動作の仕方が異なります。

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

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

新規レコード行のビジュアル カスタマイズ

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

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

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

標準アイコンは、行ヘッダー セルで使用されている DataGridViewCellStyleForeColor プロパティを使用します。標準アイコンは、表示領域が不十分な場合は描画されません。

行ヘッダー セルに文字列値が設定され、テキストとアイコンの両方を表示する十分な領域がない場合は、アイコンが最初に無効にされます。

並べ替え

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

データ バインド モードと仮想モードでは、並べ替えを適用したときの挿入動作は、データ モデルの実装によって異なります。ADO.NET では、行がすぐに正確な位置に並べ替えられます。

新規レコード行に関するその他の注意

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

新規レコード行は、常に未選択の状態で作成されます。

仮想モード

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

参照

処理手順

方法 : Windows フォーム DataGridView コントロールの新しい行に既定値を指定する

参照

DataGridView

DataGridView.DefaultValuesNeeded

その他の技術情報

Windows フォーム DataGridView コントロールでのデータ入力