マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

共有フォルダリスト画面(Webアプリ)

共有フォルダリスト画面の Web アプリの方です。

左が開発画面で右が実行画面です。(どれもクリックすると新しいウィンドウで拡大図が表示されます。)

FolderListDevWeb FolderListWeb

 

ObjectDataSource のビジネスオブジェクトは Volume クラスを指定してます。

※Volume クラスの詳細はこちら(VB版 C#版

デザイナでは次の設定をしてます。

・FolderDataSource の SELECT 操作として GetVolumes メソッドを選択

・一覧 ListBox の AutoPostBack を True にし、DataSourceID に FolderDataSource を、DataTextField と DataValueField に Name を指定

・DetailDataSource の SELECT 操作として FindByName メソッドを選択

・パラメーター ソースは「Control」を選択し、ControlID は一覧 ListBox の ID を選択

・詳細 FormView の DataSourceID に DetailDataSource を指定

・FormView を囲む UpdatePanel の AsyncPostBackTrigger に 一覧 ListBox の SelectedIndexChanged を指定

 

コードでは次の処理をしてます。

1. 一覧 ListBox 用 ObjectDataSource の SELECT 操作完了時(Selected イベント)に、取得した共有フォルダの数を表示

2. 詳細 FormView 用の ObjectDataSource の SELECT 操作前(Selecting イベント)に、共有フォルダが未選択ならイベントをキャンセル

3. 詳細 FormView 用の ObjectDataSource の SELECT 操作完了時(Selected イベント)に、選択された共有フォルダを変数に保持

4. 詳細 FormView のデータバインド後(DataBound イベント)に、共有フォルダが選択されてたら その Keywords プロパティの値を改行で連結した文字列にしたものをキーワード TextBox の Text プロパティに設定

5. 戻るボタンをクリックすると遷移前の状態のメインページに戻る

VB

Private selectedFolder As Volume

 

Private Sub FolderDataSource_Selected(

  sender As Object, e As ObjectDataSourceStatusEventArgs) Handles FolderDataSource.Selected

  Me.CountLabel.Text = String.Format("{0} 個のオブジェクト", DirectCast(e.ReturnValue, ICollection).Count)

End Sub

 

Private Sub DetailDataSource_Selecting(

  sender As Object, e As ObjectDataSourceSelectingEventArgs) Handles DetailDataSource.Selecting

  If Me.FolderListBox.SelectedIndex = -1 Then

    e.Cancel = True

  End If

End Sub

 

Private Sub DetailDataSource_Selected(

  sender As Object, e As ObjectDataSourceStatusEventArgs) Handles DetailDataSource.Selected

  selectedFolder = DirectCast(e.ReturnValue, Volume)

End Sub

 

Private Sub DetailFormView_DataBound(sender As Object, e As EventArgs) Handles DetailFormView.DataBound

  If Me.FolderListBox.SelectedIndex >= 0 Then

    Dim txt = DirectCast(Me.DetailFormView.FindControl("KeywordTextBox"), TextBox)

    txt.Text = String.Join(Environment.NewLine, selectedFolder.Keywords)

  End If

End Sub

 

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

  Response.Redirect("Main.aspx?idx=5")

End Sub

 

C#

private Volume selectedFolder;

 

protected void FolderDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)

{

  this.CountLabel.Text = String.Format("{0} 個のオブジェクト", ((ICollection)e.ReturnValue).Count);

}

 

protected void DetailDataSource_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)

{

  if (this.FolderListBox.SelectedIndex == -1)

  {

    e.Cancel = true;

  }

}

 

protected void DetailDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)

{

  selectedFolder = (Volume)e.ReturnValue;

}

 

protected void DetailFormView_DataBound(object sender, EventArgs e)

{

  if (this.FolderListBox.SelectedIndex >= 0)

  {

    var txt = (TextBox)this.DetailFormView.FindControl("KeywordTextBox");

    txt.Text = String.Join(Environment.NewLine, selectedFolder.Keywords);

  }

}

 

protected void Button1_Click(object sender, EventArgs e)

{

  Response.Redirect("Main.aspx?idx=5");

}

 

Volume.Keywords プロパティは String の配列です。

Windows アプリの方は TextBox.Lines プロパティが対応してるのでそのままセットできるんですが、Web アプリの方は TextBox.Text プロパティに対応させるしかないので、改行で連結した文字列をセットしてます。

投稿日時 : 2014年1月30日 22:16

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント