C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

動的バインドDropDownListの値設定


(過去ログ 5 を表示中)

[トピック内 1 記事 (1 - 1 表示)]  << 0 >>

■5157 / inTopicNo.1)  動的バインドDropDownListの値設定
  
□投稿者/ Glen 二等兵(1回)-(2006/07/28(Fri) 11:46:37)

分類:[VB.NET] 


分類:[VB.NET] 

はじめてこちらにたどりついたものです。

いろいろ調べてもどうしても解決できず書き込みさせていただきます。

VB.NET(Framework2.0)で開発しています。IDEはVWD2005Expressです。

DetailsViewがEditモードになった時に
DetailsView上に二つのDropDownListを配置しています。

一つ目のDropDownListは静的ObjectDataSourceでリストを設定しています。
SelectedValueはDetailsViewのDataSourceよりEvalでとってます。

--------source----------
一つ目
<EditItemTemplate>
<asp:DropDownList
ID="ddlCategory"
runat="server"
DataSourceID="CategoryListDataSource"
DataTextField="Category Name"
DataValueField="Category ID"
SelectedValue='<%# Eval("[Category ID]")%>'
AutoPostBack="True"
OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"
>
</asp:DropDownList>
</EditItemTemplate>
二つ目
<EditItemTemplate>
<asp:DropDownList
ID="ddlProduct"
runat="server"
DataTextField="Product Name"
DataValueField="Product ID"
AutoPostBack="True"
OnSelectedIndexChanged="ddlProduct_SelectedIndexChanged"
>
</asp:DropDownList>
</EditItemTemplate>


二つ目のDropDownListの初期リストはDetailsViewのOnDataBoundメソッドの中で
一つ目のDropDownListの値を使って動的にObjectDataSourceをバインドして設定してます。
SelectedValueは退避させておいたラベルより同じOnDataBoundメソッドの最後に設定してます。

--------source----------
Protected Sub detailsView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)

If detailsView.CurrentMode = DetailsViewMode.Edit Then

ProductListDataSource.SelectParameters.Clear()
ProductListDataSource.SelectParameters.Add(New Parameter("categoryID"), TypeCode.String, CType(detailsView.FindControl("ddlCategory"), DropDownList).SelectedValue))

CType(detailsView.FindControl("ddlProduct"), DropDownList).DataSource = "ProductListDataSource"
CType(detailsView.FindControl("ddlProduct"), DropDownList).DataBind()
CType(detailsView.FindControl("ddlProduct"), DropDownList).SelectedValue = CType(detailsView.FindControl("lblProduct"), Label).Text

End If
End Sub

EditモードでDetailsViewが表示された後、一つ目のDropDownListを変更するとSelectedIndexChangedメソッドが発生し、そのメソッドの中で二つ目のDropDownListのリストを動的に書き直します。

--------source----------
Protected Sub ddlCategory_SelectedIndexChanged(ByVal sender As Object, Byval e As System.EventArgs)

CType(detailsView.FindControl("ddlProduct"), DropDownList).Items.Clear()
CType(detailsView.FindControl("ddlProduct"), DropDownList).ClearSelection()
ProductListDataSource.SelectParameters.Clear()
ProductListDataSource.SelectParameters.Add(New Parameter("categoryID",TypeCode.String, CType(detailsView.FindControl("ddlCategory"),DropDownList).SelectedValue))
CType(detailsView.FindControl("ddlProduct"),DropDownList).SelectedValue = Nothing
CType(detailsView.FindControl("ddlProduct"),DropDownList).DataSource = ProductListDataSource
CType(detailsView.FindControl("ddlProduct"),DropDownList).DataBind()

End Sub

ここまでは思ったとおりに動いてくれてます。

ところがその後二つ目のDropDownListの選択ができません。
一つ目のDropDownListを初期値に選択しなおすと二つ目のDropDownListが変更可能になりますが、一つ目のDropDownListを変更すると二つ目のDropDownListのリストは書き直されますがいつも一番上が選択された状態になってしまいす。

debugすると一つ目のDropDownListが変更された後に、二つ目のDropDownListをッ変更すると、なぜか一つ目のDropDownListのSelectedIndexChangedメソッドが呼ばれてSelectedValue=Nothingを通っているようなのですが、一つ目のDropDownListが初期値の場合は二つ目のDropDowList変更時に一つ目のSelectedIndexChangedメソッドが呼ばれていません。

説明がわかりづらくてすいません。
要は一つ目のDropDownList変更→二つ目のDropDownListのリスト書き直し→二つ目のDropDownList選択、という処理ができればいいんですが・・・。

どなたかお知恵をお貸しいただければ幸いです。
よろしくお願いいたします。





0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -