我正用这个把头发拉出来。
我有一个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
答案 0 :(得分:0)
该方法执行完全匹配,区分大小写且对文化不敏感。您是否检查过调试器中的值是否相同?
答案 1 :(得分:0)
尝试使用FindByName()
。如果可行,则在最初设置数据源时未正确设置值。
答案 2 :(得分:0)
经过多次试验和错误调试后,我发现了问题。
当我将数据分配从page_load移动到pre_render事件时,我能够使控件正常工作。虽然这不太理想..我最终发现usercontrol在实际数据绑定发生之前设置了值。
我现在已将逻辑移出我的Set属性,现在将逻辑添加到我的控件page_load数据绑定中,以检查先前的SET值是否在数据绑定列表中。如果不是,则添加该项目。这样我就可以在整个应用程序中使用usercontrol而无需任何额外的页面代码,并且担心项目不在列表错误中。