【问题标题】:Changing SelectedIndex of DropDownList in repeater results in all instances of DropDownList having the same Selected Index在中继器中更改 DropDownList 的 SelectedIndex 会导致 DropDownList 的所有实例具有相同的 Selected Index
【发布时间】:2012-09-28 14:10:55
【问题描述】:

我有一个包含转发器的用户控件。中继器包含一些控件,包括一个带有 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 - 佛罗里达州 - 佛罗里达州


控件 ID:ddlPallet 控制客户端 ID:Cure1_rptCavities_ctl02_ddlPallet 3 - EP - EP


控件 ID:ddlPallet 控制客户端 ID:Cure1_rptCavities_ctl03_ddlPallet 0 - N - N

..等等

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

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

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

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

    【讨论】:

    • 宾果游戏!我曾假设这些值将通过 val 而不是 ref 复制到 dropDownList 中,但您是正确的 - 如果我在每个 ItemDataBound 方法中调暗并添加值,则所选索引会按预期粘贴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多