1

我在 page_load 中有一个下拉列表填充其中的值列表。

我想选择一个特定的值

Me.DropDownList_LocalOfficeAssignment.SelectedValue = ct.LocalOfficeName
Me.DropDownList_LocalOfficeAssignment has list of values.

问题是:它总是指向第一项。

我试过这个

For Each item As ListItem In Me.DropDownList_LocalOfficeAssignment.Items
    If item.Equals(ct.LocalOfficeName) Then
        item.Selected = True
        Exit For
    End If
Next
DV.Dispose()

仍然指向第一项。我调试过,它应该指向最后一项。ct.localoffice 包含列表中的最后一项。这就是我填充下拉列表的方式:

Dim DV As DataView = New DataView(CacheVariable.States.Tables(0))
Dim DRV As DataRowView
Me.DropDownList_LocalOfficeAssignment.Items.Clear()
DV = New DataView(CacheVariable.LocalOffice.Tables(0))
If DV.Count > 0 Then
    For Each DRV In DV
        Me.DropDownList_LocalOfficeAssignment.Items.Add(New ListItem(DRV("Name"), DRV("LocalOfficeID").ToString))
    Next
End If
4

2 回答 2

0

这通常是因为DropDownListDataBind()您设置SelectedValue. 你有DropDownList.DataSourceID属性设置吗?您是DataBind()在页面生命周期的后期调用吗?

于 2012-11-02T14:09:33.473 回答
0

基于对该问题的冗长评论......

当您尝试设置SelectedValue. 看看你是如何创建你ListItem的 s 的:

Me.DropDownList_LocalOfficeAssignment.Items.Add(New ListItem(DRV("Name"), DRV("LocalOfficeID").ToString))

创建 时ListItem您将其显示文本基础值都传递给它。在这种情况下,您将它们设置为:

  • 显示文本 =DRV("Name")
  • 基础价值 =DRV("LocalOfficeID")

根据您的评论,示例数据如下所示:

LocalOfficeID | Name
--------------------
1             | abc
2             | def
3             | xyz

然后,当您尝试手动设置 时SelectedValue,您传递的值是错误的。您实际上是在尝试这样做:

DropDownList_LocalOfficeAssignment.SelectedValue = "xyz"

sValue上的所有属性都不是。它们是、和。为了设置,你需要这个:ListItem"xyz""1""2""3"SelectedValue

DropDownList_LocalOfficeAssignment.SelectedValue = "3"

所以这条线需要改变:

Me.DropDownList_LocalOfficeAssignment.SelectedValue = ct.LocalOfficeName

在您的ct对象上,您需要获取对象的标识符,而不是它的显示名称。可能是这样的(虽然不知道是什么ct我不能确定):

DropDownList_LocalOfficeAssignment.SelectedValue = ct.ID

如果您没有标识符,则可以DropDownList通过搜索显示名称在 上找到它。这样的事情应该可以工作,尽管可能有一种更优雅的方式来做到这一点:

DropDownList_LocalOfficeAssignment.SelectedIndex = DropDownList_LocalOfficeAssignment.Items.IndexOf(DropDownList_LocalOfficeAssignment.Items.FindByText(ct.LocalOfficeName))

不过,使用标识符会干净。

于 2012-11-02T16:33:09.813 回答