asp.netのwebサーバコントロールの基本
htmlサーバコントロールはhtmlレイアウトに記載した要素の属性やスタイルをサーバ処理で変更することができます。
しかし、フォームアプリのGridView
のように、データテーブルをバインドして自動的に表を作成するようなことはできません。
表を出力するにはhtml
にはtable
タグくらいしかありません。table
タグにrunat="server"
属性をつけて、サーバ処理でデータ件数分ループで行を追加していく方法もありますが、ASP.NET
にはもっと簡単で便利な方法があります。
ASP.NET
にはwebサーバコントロールというコントロールが用意されています。
webサーバコントロールにはtextbox
やbutton
などの基本的なコントロールだけでなくGridView
のような便利なコントロールがあります。
下記のようなイメージです。htmlサーバコントロールと違い、webサーバコントロールはhtml
のスタイルや属性を直接編集するわけではなく、サーバ処理ではフォームアプリのように、コントロールのプロパティを編集し、最後にhtmlの形式に変換してレスポンスをします。
sample.aspx(htmlレイアウト)
<asp:text ID="txtName" BackColor="yellow" Text="テスト1" runat="server" />
sample.aspx.vb(サーバ処理)
txtName.Text = "テスト2" 'テキストボックスの値を変更する
txtName.BackColor = "Blue" 'テキストボックスの背景色を変更する
レスポンスされるhtml
<input type="text" id="txtName" value="テスト2" style="background-color:blue;" >
asp.netのhtmlサーバコントロールの基本で紹介したhtmlサーバコントロールでレスポンスされるhtml
と同一のものになります。
htmlサーバコントロールとはサーバ処理の方法が異なります。
webサーバコントロールのほうが、よりフォームアプリに近い感覚でコントロールを編集することができます。
テキストボックスではhtmlサーバコントロールでもwebサーバコントロールでも実装効率の観点ではあまり違いはありません。
下記のように、サーバ処理でデータ件数分ループでhtmlタグを作成し、変数をhtml
に埋め込みで出力している箇所をwebサーバコントロールのGridView
を使って書き換えます。
変更前のコード
''' <summary>
''' データ表示
''' </summary>
Private Sub dispData(ByVal dt As DataTable)
detail = ""
For Each row As DataRow In dt.Rows
detail &= "<tr><td>" & row("商品名").ToString & "</td><td>" & row("単価").ToString & "</td>" & vbCrLf
Next
End Sub
sample.aspx(tableタグをgridviewに変更します。)
<body onload="init()">
<form id="frmMain" runat="server">
<input type="button" value="登録" onclick="touroku()">
商品名:<input type="text" name="txtName" id="txtName" runat="server">
単価:<input type="text" name="txtPrice" id="txtPrice" runat="server">
<input type="hidden" name="hidMode" id="hidMode" runat="server" />
<!-- webサーバコントロールのgridviewを定義します -->
<asp:GridView ID="grvDetail" runat="server" AutoGenerateColumns="false">
<Columns><asp:BoundField DataField="商品名" HeaderText="商品名" /></Columns>
<Columns><asp:BoundField DataField="単価" HeaderText="単価" /></Columns>
</asp:GridView>
<input type="hidden" name="hidCheck" id="hidCheck" runat="server" />
</form>
</body>
</html>
sample.aspx.vb
Private Sub dispData(ByVal dt As DataTable)
grvDetail.DataSource = dt
grvDetail.DataBind() 'webサーバコントロールのgridviewにデータバインド
End Sub
サーバ処理でGridView
にデータバインドなどを行いプロパティを設定しておけばレスポンスされるhtml
を自動的に生成してくれます。
自動的にhtml
を生成してくれるのは簡単で便利ですが、レイアウトなどの細かい微調整をどのように行えばいいか困る場合があります。
その場合はwebサーバコントロールで用意されたプロパティをいろいろいじりながら、レスポンスされるhtml
を確認しながら修正していく必要があります。