1

リピーターを含むユーザーコントロールがあります。リピーターには、IDが「ddlPallet」のdropDownListなどのコントロールが含まれています。リピーターは、ユーザーコントロールのPage_Loadイベントでデータセットにバインドされます。

リピーターのItemDataBoundイベントを使用して、データセットの値に基づいてドロップダウンリストのSelectedValueを変更しています。

私が抱えている問題は、ページがレンダリングされるときに、ドロップダウンリストのすべてのselectedValueが最後に指定されたselectedValueに設定されることです。つまり、データセットに8行あり、行8が「N」の場合、すべてのインスタンスの選択されたインデックスです。 'ddlPallet'のselectedValueは'N'になります

これが私のItemDataBoundコードです:

Protected Sub rptCavities_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptCavities.ItemDataBound
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        Dim ddl As DropDownList
        ddl = e.Item.FindControl("ddlPallet") 'get the dropdown
        ddl.Items.AddRange(Me._arrPallets) 'add items
        Dim drv As DataRowView = CType(e.Item.DataItem, DataRowView) 'get the data row being bound
        Dim sv As String = "" 'get the value of the 'pallet' column from the dataset
        If Trim(drv("Pallet").ToString()) <> "" Then
            sv = drv("Pallet").ToString()
        Else
            sv = "N"
        End If
        ddl.SelectedValue = sv 'set the selected value of the dropdown list for this item
        'debug
        System.Diagnostics.Debug.WriteLine("----")
        System.Diagnostics.Debug.WriteLine("Control ID: " & ddl.ID)
        System.Diagnostics.Debug.WriteLine("Control Client ID: " & ddl.ClientID)
        System.Diagnostics.Debug.WriteLine(ddl.SelectedIndex.ToString() & " - " & ddl.SelectedItem.ToString() & " - " & ddl.SelectedValue)
        System.Diagnostics.Debug.WriteLine("")
    End If
End Sub

デバッグ出力は、適切なSelectValueがアイテムごと/ドロップダウンリストごとに設定されていることを示しています。


コントロールID:ddlPalletコントロールクライアントID:Cure1_rptCavities_ctl01_ddlPallet 4-FL-FL


コントロールID:ddlPalletコントロールクライアントID:Cure1_rptCavities_ctl02_ddlPallet 3-EP-EP


コントロールID:ddlPalletコントロールクライアントID:Cure1_rptCavities_ctl03_ddlPallet 0-N-N

..等。

これは私を狂わせています。最後に設定されたインデックス値がリピーターのdropDownListのすべてのインスタンスに適用される原因となる、ある種のスコープエラーがあると思いますが、どこで、またはその理由を理解することができません。「Text='<%#Container.DataItem( "Pallet")%>'」を使用して同じデータをASCXファイルのラベルにバインドすると、正しいデータが表示されます。

4

1 に答える 1

0

ドロップダウンリストをソースデータにバインドするのではなく、すべての場合に同じアイテムをドロップダウンリストに追加していることが原因である可能性があります。このように、それらはすべて共通のアイテムセットを共有し、Selected = trueを1つのアイテムに設定すると、そのアイテムを含むすべてのドロップダウンリストに当てはまります。

おそらく興味深いテクニックですが、おそらくあなたが望むものではありません。

于 2012-09-28T14:31:06.757 に答える