5

(解決策を見つけるには、投稿の一番下までスクロールします。)

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; 
        }
4

4 に答える 4

9

DataList がデータ バインドされている場合、AutoPostBack はまだ処理されていません。つまり、ItemCreated イベントの値は元の値のままです。

ドロップダウン コントロールの SelectedIndexChange イベントを処理する必要があります。

于 2008-11-23T17:28:09.097 に答える
0

Thank You for your solution

 protected void ddlOnSelectedIndexChanged(object sender, EventArgs e) {
     try {
         ModalPopupExtender1.Show();
         if (ViewState["Colors"] != null) {
             FillColors(ViewState["Colors"].ToString());
         }

         DropDownList dropDownListColor = (DropDownList)sender;
         DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;

         Image image = (Image)dataListItem.FindControl("mdlImage");
         Label ProductCode = (Label)dataListItem.FindControl("lblprdCode");
         Label ProductName = (Label)dataListItem.FindControl("lblProdName");
         DropDownList ddlQuantity = (DropDownList)dataListItem.FindControl("ddlQuantity");
         Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
         Label TotalPrice = (Label)dataListItem.FindControl("lblTotPrice");
         //Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
     } catch (Exception ex) {

     }
 }
于 2014-10-11T11:04:32.023 に答える
0

2番目の質問について:

ドロップダウンから AutoPostBack を削除し、「更新」ボタンを追加して、ボタンのクリック イベントでデータを更新することをお勧めします。

ボタンは Command 値と CommandArgument 値を保持できるため、データベース レコードと簡単に関連付けることができます。

于 2008-11-23T19:10:11.137 に答える