我有一个包含转发器的用户控件。中继器包含一些控件,包括一个带有 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
调试输出显示正在为每个项目/每个 dropDownList 设置适当的 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
..ETC。
这让我发疯了。我假设我有某种范围错误导致最后设置的索引值应用于转发器中 dropDownList 的所有实例,但我没有运气弄清楚在哪里或为什么。如果我使用 "Text='<%#Container.DataItem("Pallet")%>'" 将相同的数据绑定到 ASCX 文件中的标签,则会显示正确的数据。