次の方法で共有


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 コントロールの最後の行になります。 行 (DataGridViewRowCollectionAddAddCopy) を追加するAddCopiesのメソッドは、新しいレコードの行が存在するときに、すべての挿入メソッドを内部的に呼び出します。

新しいレコードの行の視覚的なカスタマイズ

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

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

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

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

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

並べ替え

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

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

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

この行の Visible プロパティを false に設定することはできません。 これを試みると、 InvalidOperationException が発生します。

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

仮想モード

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

こちらも参照ください