ASP.NET Visual Basic代码背后..尝试填充驻留在formview中的下拉列表

时间:2016-07-21 10:43:32

标签: asp.net vb.net drop-down-menu formview

我正在寻找我的项目的一点帮助。 在我的代码中,我有两个下拉列表。第一个列表在页面加载时填充,结果来自LDAP查询。因此,下拉列表工作正常,并向用户显示AD中的活动用户列表。

现在我的头脑刮擦了...... 我的项目中有一个formview控件。我在edititem模板中添加了一个额外的下拉列表。我想要做的是将第一个下拉内容复制到第二个内容中。我遇到的问题是,当我尝试为第二个编写代码时,我不断收到第二个控件尚未声明的错误,这对我来说实际上是有意义的,因为表单没有&#39 ; t确实存在于页面上,直到有人在gridview控件中选择formview绑定的索引。

我认为为了做到这一点,我需要在formview的edititem事件中使用.findcontrol运算符。但是,当我尝试这个时,我仍然得到关于控件的ID未被声明的错误。我会粘贴到目前为止我尝试过的东西..

''在这里我填充

背后的代码中的第一个下拉列表
    Dim dirEntry As DirectoryEntry = New DirectoryEntry("LDAP:MyIPaddress", "MyDomain/Username", "MyPassword", AuthenticationTypes.FastBind)

        Dim searcher As DirectorySearcher = New DirectorySearcher(dirEntry)

        '' Filter the search so that it only pulls up Active user accounts. The search filter "!userAccountControl:1.2.840.113556.1.4.803:=2" removes
        '' disabled users from the list. For a list of all attributes defined by Active Directory, see https://msdn.microsoft.com/en-us/library/ms675090(v=vs.85).aspx
        searcher.Filter = "(&(objectClass=User)(objectCategory=person)(!userAccountControl:1.2.840.113556.1.4.803:=2))"

        '' Loop through the search results and add each user as string types to list controls 
        Dim userNames As New List(Of String)

        For Each resEnt As SearchResult In searcher.FindAll()
            Dim userName As String = resEnt.Properties("name")(0).ToString()

            userNames.Add(userName)

        Next


        userNames.Sort()
        For Each userName In userNames
            userList.Items.Add(userName)

        Next

''这是我到目前为止试图找到第二个控件的原因......

    Protected Sub FormView1_DataBound(sender As Object, e As System.EventArgs) Handles FormView1.DataBound
    If FormView1.CurrentMode = FormViewMode.Edit Then
        DropDownList(userListEdit = FormView1.FindControl("userListEdit"))

    End If
End Sub

''一旦我尝试写最后一行来找到控件,我就会收到一个错误,说明控件没有被声明。我试图在网上找到许多不同论坛的解决方案。但似乎没有什么能正是我所需要的。有谁知道如何找到这个控件并在后面的代码中复制内容?提前致谢!

2 个答案:

答案 0 :(得分:0)

从它的外观来看,答案可能很简单。您的代码是:

DropDownList(userListEdit = FormView1.FindControl("userListEdit"))

您需要做的是:

Dim ddlList As DropDownList = FormView1.FindControl("userListEdit")

或者你可以DirectCast()直接访问:

DirectCast(FormView1.FindControl("userListEdit"), DropDownList) //.anyMethod()

答案 1 :(得分:0)

@peyote boy 非常感谢你的回答。这向我展示了正确的语法..从那里我必须学习一些关于会话状态的东西来获得我想要的结果。

在我的页面加载事件中,我添加了这行代码

    Session("userNames") = userNames 

这使列表保持当前会话状态,以便稍后使用。然后我用你的建议终于得到了我想要的结果。

    Protected Sub DetailsView1_Databound(sender As Object, e As System.EventArgs) Handles DetailsView1.DataBound
If DetailsView1.CurrentMode = DetailsViewMode.Edit Then 
    Dim ddlList As New DropDownList
    ddlList = DetailsView1.FindControl("userEditList") 
        For Each userName In Session("userNames") 
            ddlList.Items.Add(userName)
       Next
      End If 
      End Sub 

再次感谢您的帮助! :)