- PR -

カスタムDropDownListとDetailsViewとの連動について

1
投稿者投稿内容
かずぴー
会議室デビュー日: 2004/08/20
投稿数: 2
投稿日時: 2006-08-07 10:37
VS2005 C# でWEBアプリケーションで商品注文・変更を行う画面を開発しております。
WEBアプリ初心者で、的外れな質問かもしれませんが、どうか御教授願います。

商品を選択するDropDownListを作成するため DropDownList を継承した ProductsDropDownList と言うものを作成しました。
その ProductsDropDownList は、予めデータベースからデータを検索してあるDataSetをリストする様に
以下のコーディングを施しております。
-----------------
public class ProductDropDownList : DropDownList {

protected override void OnInit(EventArgs e){
DataSet ds = [予め用意してあるマスタDataSet];

this.DataSource = ds.Tables["PRODUCTS"]; // 商品マスタ
this.DataTextField = "PRODUCT_NAME"; // 商品名
this.DataValueField = "PRODUCT_ID"; // 商品ID
this.DataBind();
}
}
-----------------
次に Order.aspx というページを作成し
1.注文情報のObjectDataSource と、DetailsView を貼付け、
2.DetailsView のデータソースを 注文情報のObjectDataSourceに設定しました。

3.このDetailsView のEditTemplateに、先ほどのProductsDropDonwList 貼り付け
4.SelectedValue を 注文情報の[商品ID]というカラムにバインドさせましたが

実行時にProductDropDownList 側の this.DataBind() で以下の例外が発生してしまい困っております。

例外:Eval()、XPath()、および Bind() のようなデータバインド メソッドは、データバインドされたコントロールのコンテキストでのみ使用することができます。

「4」のSelectedValue にバインドさせないなど、データと連動させなければ、例外は発生しませんが、それでは注文情報のデータを初期表示できません。

-----------------
普通のDropDownList を貼り付け、画面に商品選択用に ObjectDataSource を貼り付けるのが通常なのかもしれませんが、このProductsDropDownListは 他の画面でも沢山使うため、煩雑な処理はなるべく避けたいと考えております。

願わくば「ProductsDropDownList を貼り付けるだけにしたい。」のです。

何か良い方法は無いものでしょうか?
それとも、私が何か勘違いしているのでしょうか?

よろしく御願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)