X

【ASP.NET】GridViewのコントロールGridView1は、runat=server を含む form タグの内側に置かなければ成りません

今回はたまに使うGridViewを利用したExcelファイル出力の備忘録です。
Webフォームに更新可能でソートも可能なGridViewを作成しました。
帳票を作るときは、画面で仕様が固まった後、PDFもしくはEXCELをGridView経由で出力できるようにしています。

データ更新できるGridviewにすると、EXCEL出力する際にinputコントロールやSelectコントロールまで付いてしまうのでいつもは画面用のGridViewを流用することはしないのですが、何気なく流用してみたところエラーが出てしまいました。

『GridViewのコントロールGridView1は、runat=server を含む form タグの内側に置かなければ成りません』
です。
グッグってみたところ、

このコードを付け加えてみてください。
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub

と言う記述を発見しました。

もう少し調べると
VerifyRenderingInServerFormの解説に、

<form runat=server>タグの内側に配置する必要があるコントロールが、表示される前にこのメソッドを呼び出すことができます。その
ため、そのようなコントロールがタグの外側に配置された場合、エラー メッセージが表示されます。登録したスクリプト ブロックをポストバックするコントロール、または登録したスクリプト ブロックに依存するコントロールは、Control.Render メソッドのオーバーライド部で、このメソッドを呼び出す必要があります。サーバー フォーム要素の表示方法が異なっているページは、異なった条件の下でこのメソッドをオーバーライドして例外をスローできます。

上のこのコードを付け加えてみてくださいとは、「異なった条件の下でこのメソッドをオーバーライドして例外をスローできます」のアドバイスに従ったものだとわかりました。

他のページには、更に

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
    ' このOverridesは以下のエラーを回避するために必要です。
    ' 「GridViewのコントロールGridView1は、runat=server を含む
    '  form タグの内側に置かなければ成りません」    
  End Sub

のように親切に書かれているものもありました。

早速、試してみたところ、該当の『GridViewのコントロールGridView1は、runat=server を含む form タグの内側に置かなければ成りません』は出なくなりましたが、新たなエラーが。。。

『RegisterForEventValidation は Render(); の実行中にのみ呼び出されることができます』
が発生するようになりました。

これの対策はまた後日。。。

itsysgroup:
Related Post