GridView Web サーバー コントロール内のデータの変更
更新 : 2007 年 11 月
GridView コントロールには、ユーザーがプログラミングを行うことなく、レコードを編集または削除できるようにする組み込み機能が含まれています。GridView コントロールの編集機能または削除機能をカスタマイズするには、イベントとテンプレートを使用します。
組み込み編集機能の有効化
GridView コントロールの組み込み編集機能または削除機能は、次の方法で有効にできます。
AutoGenerateEditButton プロパティを true に設定して更新を有効にし、AutoGenerateDeleteButton プロパティを true に設定して削除を有効にします。
ShowEditButton プロパティを true に設定し、ShowDeleteButton プロパティを true に設定した CommandField を追加することによって、更新および削除を有効にします。
TemplateField を作成します。この場合、ItemTemplate には、CommandName が "Edit" (更新用) および "Delete" (削除用) に設定されたコマンド ボタンが含まれます。詳細については、「GridView Web サーバー コントロールにおけるカスタム列の作成」を参照してください。
GridView コントロール内での編集のしくみ
GridView コントロールは、ユーザー インターフェイス (UI) を表示して、ユーザーが個々の行の内容を編集できるようにします。通常、編集可能なグリッドにはボタンまたはリンクを持つ列が含まれ、ユーザーはこのボタンまたはリンクをクリックして行を編集モードに設定できます。既定では、ボタンのキャプションは "編集" になります。
ユーザーが変更を保存すると、GridView コントロールは変更と主キーの情報を DataSourceID プロパティによって識別されたデータ ソース コントロールに渡します。このデータ ソース コントロールは、適切な更新操作を起動します。たとえば、SqlDataSource コントロールは、変更されたデータをパラメータ値として使用して SQL 更新ステートメントを実行します。ObjectDataSource コントロールは自身の更新メソッドを呼び出し、変更データをパラメータとしてメソッド呼び出しに渡します。
GridView コントロールは、3 つのディクショナリ コレクション (Keys ディクショナリ、NewValues ディクショナリ、および OldValues ディクショナリ) での更新操作または削除操作のために、値をデータ ソースに渡します。各ディクショナリには、GridView コントロールの更新イベントまたは削除イベントに渡された引数を使用してアクセスできます。
Keys ディクショナリには、更新または削除対象のレコードを一意に識別するフィールドの名前と値が含まれます。キー フィールドの元の値は常に含まれます。Keys ディクショナリに配置するフィールドを指定するには、DataKeyNames プロパティにデータの主キーを表すフィールド名のリスト (コンマ区切り) を設定します。DataKeys コレクションには、DataKeyNames プロパティに指定されたフィールドに関連付けられている値が、自動的に設定されます。
メモ : |
---|
DataKeyNames プロパティで指定されたフィールドの元の主キーの値は、ビューステートに格納されます。主キーの値に重要な情報が含まれるときは、ページの ViewStateEncryptionMode プロパティを Always に設定して、ビューステートの内容を暗号化する必要があります。 |
NewValues ディクショナリには、編集中の行の入力コントロールの現在値が含まれます。OldValues ディクショナリには、Keys ディクショナリに含まれているフィールドを除くフィールドの元の値が含まれます。
データ ソース コントロールは、更新コマンドまたは削除コマンドのパラメータとして、Keys ディクショナリ、NewValues ディクショナリ、および OldValues ディクショナリの値を使用します。バインドされた値に対して作成されたディクショナリに基づいてデータ ソース コントロールのパラメータが作成される方法については、「データ ソース コントロールがデータ連結フィールドのパラメータを作成する方法」を参照してください。
RowUpdating または RowDeleting イベントを処理することによって、データ ソースに渡される前に、任意のディクショナリのコンテンツをチェックまたはカスタマイズできます。更新または削除が完了すると、GridView コントロールは RowUpdated イベントまたは RowDeleted イベントを発生させます。これらのイベントにより、整合性チェックのようなクエリ後のロジックを実行できます。
更新または削除が完了し、すべてのイベントが発生したら、GridView コントロールはデータ ソース コントロールに再バインドされて、更新済みデータを表示します。
メモ : |
---|
GridView コントロールの更新可能なフィールドの元の値は ViewState に格納されます。更新可能な GridView コントロールを含む ASP.NET ページで ViewState が無効にされると、オプティミスティック同時実行制御チェックは、GridView コントロールが最初にデータ ソースにバインドされたときに取得された更新可能フィールドおよび主キー フィールドに元の値を使用できません。更新または削除を実行するためにページがポストバックされる場合、ViewState には値が格納されていないため、データベースの現在の値が GridView コントロールの更新可能フィールドおよび主キー フィールドに元の値として取得されます。この場合、更新または削除操作は、元の値を使用して実行されます。GridView コントロールが最初に取得された後、元の値が変更された場合、更新または削除は正常に終了しますが、オプティミスティック同時実行制御チェックは本来報告するべきエラーを報告しません。 |
GridView コントロール内の編集ユーザー インターフェイスのカスタマイズ
編集モードでデータ フィールドごとに表示されるコントロールなど、編集 (UI) の要素はカスタマイズできません。双方向自動データ バインディングにより、カスタム コントロールは、編集可能な値および編集された値を、データ ストアとの間でやり取りできます。
メモ : |
---|
データ ソース コントロール内の更新ステートメントを変更した場合や、GridView コントロール内の列を再配置した場合、GridView コントロールによってデータ ソースに渡される値が、対応するデータ ソース構成と一致することを確認してください。 |