エンティティテンプレートのカスタマイズ
以下に手順を記します。少しトリッキーな部分がありますのでご注意ください。
1.ユーザーコントロールの追加
EntityTemplatesフォルダー上で右クリックし、[追加]-[新しい項目]を選択して、新しい項目の追加ダイアログからWebユーザーコントロールを選択します。名前を"Customers.aspx"と設定して追加します。
2.ユーザーコントロールの修正
Customers.ascx.csファイルの以下の記載を修正します。
// 修正前 public partial class Customers : System.Web.UI.UserControl // 修正後 public partial class Customers : System.Web.DynamicData.EntityTemplateUserControl
継承元をエンティティテンプレートで使用するユーザーコントロールのクラス"EntityTemplateUserControl"へと変更させます。
3.HTMLデザイナ上でtr/tdタグと内容を記載
エンティティテンプレートで適用される内容をCustomers.aspxファイルに記載します。
今回は以下のように記載します。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Customers.ascx.cs" Inherits="CustomizeDD4.DynamicData.EntityTemplates.Customers" %> <tr> <td class="DDLightHeader"> <asp:Label ID="Label1" runat="server" Text="CompanyName" /> </td> <td> <asp:DynamicControl ID="DynamicControl1" runat="server" DataField="CompanyName" /> </td> <td class="DDLightHeader"> <asp:Label ID="Label2" runat="server" Text="ContactName" /> </td> <td> <asp:DynamicControl ID="DynamicControl3" runat="server" DataField="ContactName" /> </td> </tr> <tr> …以下略 </tr>
Default.ascxとの違いとして、1行に2項目表示しています。他には、DynamicControlのDataFieldプロパティにCustomersテーブルの項目名を指定します。後は繰り返し実施するだけです。編集・新規作成のDynamicControl記載例は以下のとおりです。
<asp:DynamicControl ID="DynamicControl1" runat="server" Mode="Edit" DataField="CompanyName" />
<asp:DynamicControl ID="DynamicControl1" runat="server" Mode="Insert" DataField="CompanyName" />
ご覧のとおり、ModeプロパティでEdit/Insertの指定をするだけです。コードビハインド側での処理は一切不要です。全てDynamic Data側で処理します。
以上で設定完了です。実行すると図4~5のような画面を確認できます。
なお、エンティティテンプレート内でもデータフィールドのカスタマイズは反映されるので、前回ご紹介した方法で入力補助などを簡略化させることもできます(図6)。
エンティティテンプレートはそれほどハードルが高くないので、3列くらいのテーブルとしてカスタマイズしてみるといいでしょう。
まとめ
今回はフィルター作成とエンティティテンプレートのカスタマイズについてご紹介しました。フィルター作成はGetQueryableメソッドの実装があるためハードルが高く感じたかもしれませんが、作成の流れ部分を押さえることが重要です。多くのデータから特定データを抽出するためにはフィルター機能の作成は必須ですので、Dynamic Dataを活用する際にはフィルター作成にも挑戦してみてはいかがでしょうか。
エンティティテンプレートはカスタマイズできる範囲が限られているため歯がゆく感じる方も多いとは思いますが、すぐに見栄えを変更できると考えれば悪くはない機能です。こちらも現場でDynamic Dataを使うことになるならば、ぜひ利用をご検討ください。
連載の最初にも記載しましたがLightSwitchとは違い、プラグインなしで利用でき、イントラネット内でもブラウザがあれば利用できるDynamic Dataは確実にニーズがあると言えます。ASP.NET Web FormやASP.NET MVCのバックグラウンドをサポートするアプリケーションとしてASP.NET Dynamic Dataを一度検討していただければ幸いです。