リピーターを含むユーザーコントロールがあります。リピーターには、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ファイルのラベルにバインドすると、正しいデータが表示されます。