FinByValue无法在UserControl DropDownList的上下文中工作

时间:2011-03-23 23:02:32

标签: asp.net user-controls properties drop-down-menu

我正用这个把头发拉出来。

我有一个Employee下拉列表usercontrol(uxEmployee),我已将SelectedValue方法公开为属性(SelectedValue)。

在我的页面中,我试图根据我的数据设置值,或者如果当前不在那里,则将值添加到列表中。

无论我做什么,都将Set值添加到列表中。即使价值已经列在清单上;它仍在增加价值。基本上,无论我做什么,FindByValue总是返回“Nothing”。任何帮助将不胜感激。

    Public Property SelectedValue() As String

    Get
        Return uxEmployee.SelectedValue
    End Get

    Set(ByVal value As String)

        If Not uxEmployee.Items.FindByValue(value) Is Nothing Then
            uxEmployee.SelectedValue = value
        Else
            uxEmployee.Items.Insert(0, New ListItem(value, value))
            uxEmployee.AppendDataBoundItems = True
            uxEmployee.DataBind()
        End If

    End Set
End Property

Public WriteOnly Property Department() As String
    Set(ByVal value As String)
        _department = value
    End Set
End Property

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not (IsPostBack) Then
        Dim emp As New Employee()

        With uxEmployee
            If _department <> String.Empty Then
                .DataSource = emp.GetByDept(_department)
            Else
                .DataSource = emp.GetList()
            End If
            .DataTextField = "FullName"
            .DataValueField = "UserName"
            .DataBind()
        End With
    End If
End Sub

我的调用页面在页面加载中使用以下内容.uxSalesleadv是uxemployee的实例

    Dim objPrj As ServiceProject = New ServiceProject()
        objPrj = objPrj.GetItem(prjID)
        With objPrj
            uxSalesLead.SelectedValue = .SalesLead
            End With

3 个答案:

答案 0 :(得分:0)

该方法执行完全匹配,区分大小写且对文化不敏感。您是否检查过调试器中的值是否相同?

答案 1 :(得分:0)

尝试使用FindByName()。如果可行,则在最初设置数据源时未正确设置值。

答案 2 :(得分:0)

经过多次试验和错误调试后,我发现了问题。

当我将数据分配从page_load移动到pre_render事件时,我能够使控件正常工作。虽然这不太理想..我最终发现usercontrol在实际数据绑定发生之前设置了值。

我现在已将逻辑移出我的Set属性,现在将逻辑添加到我的控件page_load数据绑定中,以检查先前的SET值是否在数据绑定列表中。如果不是,则添加该项目。这样我就可以在整个应用程序中使用usercontrol而无需任何额外的页面代码,并且担心项目不在列表错误中。