(解決策を見つけるには、投稿の一番下までスクロールします。)
Datalist を含む asp.net ページを取得しました。このデータリスト内には、ドロップダウンリストを含むテンプレートがあり、データリストにアイテムが入力されるたびに、ItemCreatedCommand が呼び出されます。itemCreatedCommand は、ドロップダウンリストのデータバインドを担当します。
問題はここにあると思います.ItemCreatedCommandを使用してデータを入力していますが、奇妙なことに、「緑」の色を選択すると、ページが自動ポストバックされ、ドロップダウンがまだ緑色になっていることがわかります、しかし、SelectedIndex を使用しようとすると、常に 0 になります...
protected void DataListProducts_ItemCreatedCommand(object
source, DataListItemEventArgs e)
var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex];
var item = itemBLL.GetFullItem(itemId);
var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor");
//Also tried with :
//if(!isPostBack) {
DropDownListColor.DataSource = item.ColorList;
DropDownList.Color.Databind();
// } End !isPostBack)
Label1.test = DropDownListColor.SelectedIndex.toString();
// <- THIS IS ALWAYS 0! *grr*
表示のためにコードを少し絞り込みましたが、それでも私がやろうとしていることを見ることができます :) 私がこれを行っている理由と、色のデータソースを aspx-page で直接宣言していない理由テスト if(showColors) を実行する必要がありますが、コードビハインドファイルにあるはずのコードで html ページを乱雑にしたくないということです。
編集: SelectedIndexChange を変更しようとした後-頭の中で「論理的な」混乱が生じています-データリスト内の要素を変更するにはどうすればよいですか? 私の知る限り、この特定のドロップダウンリストが属するデータリスト内のアイテムを確認する方法がありません...または?いくつかの方法を試して、最終的にどうなるか見てみます ;) しかし、この質問についての考えを投稿してください :)
解決:
イベントを ItemCommand にバブルするか、イベントを処理して、送信者の親 (datalistItem である) を取得し、そこで要素を操作します。
protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dropDownListColor = (DropDownList)sender;
DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;
var item = items[dataListItem.ItemIndex];
var color = item.ItemColor[dropDownListColor.SelectedIndex];
var LabelPrice = (Label)dataListItem.FindControl("LabelPrice");
LabelPrice.Text = color.Price;
}