在Repeater中更改DropDownList的SelectedIndex会导致DropDownList的所有实例具有相同的Selected Index

时间:2012-09-28 14:10:55

标签: asp.net vb.net

我有一个包含转发器的用户控件。转发器包含一些控件,包括id为'ddlPallet'的dropDownList。转发器绑定到用户控件'Page_Load事件中的数据集。

我正在使用转发器的ItemDataBound事件来根据数据集中的值更改下拉列表的SelectedValue。

我遇到的问题是,当页面呈现时,所有下拉列表的selectedValue都被设置为指定的最后一个selectedValue - 即如果数据集中有8行而第8行是'N'则选择的索引“ddlPallet”的所有实例中的selectValue都为'N'<​​/ p>

这是我的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

...等。

这让我疯了。我假设我有某种范围错误,导致最后设置的索引值应用于转发器中dropDownList的所有实例,但我没有运气找出在哪里或为什么。如果我使用“Text ='&lt;%#Container.DataItem(”Pallet“)%&gt;'”将相同数据绑定到ASCX文件中的标签,则会显示正确的数据。

1 个答案:

答案 0 :(得分:0)

可能是因为您在每种情况下都将相同的项添加到下拉列表中,而不是将下拉列表绑定到源数据。这样,它们共享一组共同的项目,如果将Selected = true设置为一个项目,则包含该项目的每个下拉列表都是如此。

可能是一种有趣的技术,但可能不是你想要的。