2011-03-23 33 views
0

我正在用这个拉出我的头发。FinByValue在UserControl的上下文中不起作用DropDownList

我有一个员工dropdownlist usercontrol(uxEmployee),我已经公开SelectedValue方法作为属性(SelectedValue)。

在我的页面我想要根据我的数据设置值或将值添加到列表中,如果它目前不在那里。

无论我做什么,它都将设置值添加到列表中。即使该值已经在列表中,它仍然在增加价值。无论我做什么,基本上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

你最初如何填充uxEmployee.Items? – 2011-03-23 23:11:08

+0

我的GetList函数只返回一个reguluar业务对象类的数据集。 – jsam 2011-03-24 04:47:48

+0

是否可以在dropdownlist usercontrol的SET属性中使用getselectedvalue?任何人可以协助? – jsam 2011-03-24 06:39:10

回答

0

该方法执行精确匹配和区分大小写和不区分区域性的一个实例。你是否检查过调试器中的值是否相同?

+0

我试图但我得到通用的“为了评估一个索引的属性,该属性必须是合格的..”的员工的项目集合。我对此感到不知所措。我花了整整一天的时间来研究这个问题,但仍然不知道为什么它不能正常工作。 – jsam 2011-03-24 04:49:48

0

尝试使用FindByName()。如果它起作用,那么当您最初设置数据源时,值不会被正确设置。

+0

仍然不起作用。我已经使用相同的程序测试了findbyvalue,但使用了onpage ddl而不是usercontrol,它工作正常。它只是在用户控件不工作,我不知道为什么。 – jsam 2011-03-24 14:28:04

0

经过大量的反复试验和调试,我发现了这个问题。

当我将数据分配从page_load移至pre_render事件时,我能够使控件正常工作。虽然这并不理想,但我终于发现,在实际的数据绑定发生之前,usercontrol正在设置该值。

我现在已经将逻辑移出了我的Set属性,现在将逻辑添加到了我的控件page_load数据绑定中,以检查前一个SET值是否位于数据绑定列表中。如果没有,则添加该项目。这将允许我在整个我的应用程序中使用用户控件,而不需要任何额外的页面代码,并且担心项目不在列表错误中。

相关问题