Web アプリケーションで WebSchedule を使用できるひとつの方法は、WebScheduleInfo および WebSchedule データ プロバイダをひとつの場所に集める再利用可能な ASP.NET UserControl に WebSchedule ビューを配置することです。ユーザー コントロールは、WebScheduleInfo と任意の必要なデータベース接続が正しく設定されていることを確認する役割を果たします。この詳細なガイドでは、WebSchedule アプリケーション用の UserControl の簡単な例を作成します。
この詳細なガイドを開始する前に、UserControl の作成を多少経験しておく必要があります。WebScheduleInfo、WebSchedule データ プロバイダ、WebSchedule ビュー要素間の関係に精通している必要があります。クイック スタートの詳細なガイドで説明したように、WebSchedule 要素を WebForm に配置して、データベースと接続する経験があると非常に役に立ちます。このプロジェクトでは、空の WebForm(これは最終的なWebアプリケーション)とUserControl(複数の WebSchedule 要素をひとつの再利用可能なパッケージ結合する)から開始します。
Visual Studio .NET デザイナで、ツールボックスから WebScheduleInfo、WebScheduleOleDbDataProvider および WebDayView を WebUserControl1.ascx ファイルに追加します。
これら 3 つの WebSchedule 要素は、連携してエンド ユーザーに毎日のスケジュール情報を提示します。ただし、UserControl が満たすことのできる一定量のクロス接続を発生させる必要があります。さらに、UserControl をより有用にするために WebDayView のいくつかの標準品質をカスタマイズします。
この時点で、 「Visual Studio 2005 で WebSchedule をデータベースに接続」 の詳細なガイドで述べられている手順に従い、ユーザー コントロールのデータ接続元をカスタマイズすることもできます。この詳細なガイドの目的のために、デフォルトの WebSchedule データベースが使用されることを前提とします。
Page_Load イベントの間、WebSchedule コンポーネントを WebScheduleInfo に接続します。
WebUserControl1.ascx ページのデザイン画面の任意の場所をダブルクリックして、Page_Load イベント ハンドラにこのコードを追加します。
Visual Basic の場合:
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load ' 各 WebSchedule 要素を WebScheduleInfo に接続します。 Me.WebDayView1.WebScheduleInfo = WebScheduleInfo1 Me.WebScheduleOleDbProvider1.WebScheduleInfo = WebScheduleInfo1 End Sub
C# の場合:
private void Page_Load(object sender, System.EventArgs e) { // 各 WebSchedule 要素を WebScheduleInfo に接続します。 this.WebDayView1.WebScheduleInfo = WebScheduleInfo1; this.WebScheduleOleDbProvider1.WebScheduleInfo = WebScheduleInfo1; }
これらの接続はコードビハインドで実行する必要があります。WebScheduleInfoID プロパティを通してデザインタイムに保持することができるコントロールの ID は、これらのコントロールが UserControl 内にネストされる場合に、常に対応するコントロールを見つけ出すことができるとは限らないからです。これは、UserControl が含むあらゆるコントロールを、UserControl が固有のインスタンス名によって修飾するためです。このインスタンス名は、UserControl が Page に追加されている時に限って割り当てられるため事前に予測できません(たとえば、Page に追加された UserControl1 の最初のインスタンスは「UserControl11」という名前が付けられており、そのインスタンスの中にネストされた WebDayView 要素名は「UserControl11_WebDayView1」になります)。ランタイムにコントロールの参照プロパティを常に割り当てることによって、異なるユーザー コントロールにまたがるコントロールの接続の損傷に関連した問題を回避することができます。この場合、これらの要素での WebScheduleInfo プロパティです。
ActiveResourceName プロパティを WebUserControl.ascx コードビハインド ファイルに追加します。
開発者が WebSchedule を併用したいさまざまなリソースに対して UserControl を容易にカスタマイズするためには、WebScheduleInfo の ActiveResourceName プロパティを公開することを推奨します。これによって、WebForm にドロップした時に WebUserControl をさまざまなリソースにカスタマイズできます。
Visual Basic の場合:
Public Property ActiveResourceName As String Get Return Me.WebScheduleInfo1.ActiveResourceName End Get Set Me.WebScheduleInfo1.ActiveResourceName = Value End Set End Property
C# の場合:
public string ActiveResourceName { get { return this.WebScheduleInfo1.ActiveResourceName; } set { this.WebScheduleInfo1.ActiveResourceName = value; } }
ローカル時間でアクティブ日を指定する WebUserControl.ascx コードビハインドファイルに ActiveDay プロパティを追加します。
デフォルトで、WebSchedule はタイムゾーンの独立性を維持するために Universal Time で ActiveDayUtc プロパティを指定します。開発者によっては、ローカル時間でアクティブ日を設定することを好む場合がありますが、ユーザー コントロールからアクティブ日を確実に公開することは重要です。したがって以下に示す read/write プロパティを追加して、ローカル時間に基づいてアクティブ日を公開します。
Visual Basic の場合:
Public Property ActiveDay As DateTime Get Dim utc As SmartDate = Me.WebScheduleInfo1.ActiveDayUtc Return utc.ToLocalTime().Value End Get Set Dim local As SmartDate = New SmartDate(Value) Me.WebScheduleInfo1.ActiveDayUtc = local.ToUniversalTime() End Set End Property
C# の場合:
public DateTime ActiveDay { get { SmartDate utc = this.WebScheduleInfo1.ActiveDayUtc; return utc.ToLocalTime().Value; } set { SmartDate local = new SmartDate(value); this.WebScheduleInfo1.ActiveDayUtc = local.ToUniversalTime(); } }
プロジェクトを再ビルドして、WebUserControl1 を WebForm に追加します。
多数の変更を行ってきたので、コンパイルするかどうかを確認します。ビルドしたら、ユーザー コントロールをメインアプリケーションの WebForm に追加して、ActiveDay や ActiveResourceName などの WebForm にプロパティを設定することができます。
WebSchedule 要素のルーチン接続を問題なく管理し、WebScheduleInfo の主要なプロパティの中 2 つを公開する ASP.NET UserControl を作成しました。次の手順として、公開する追加のプロパティを追加して、この UserControl のあらゆるインスタンスを付けたい一部のデフォルトのカスタマイズを構築することによって、このコントロールを試すことができます。