ASP.NET Visual Basic代码隐藏。。尝试填充驻留在formview中的dropdownlist

ASP.NET Visual Basic代码隐藏。。尝试填充驻留在formview中的dropdownlist,asp.net,vb.net,drop-down-menu,formview,Asp.net,Vb.net,Drop Down Menu,Formview,我在这里寻找对我的项目的一点帮助。 在我的代码中,我有两个下拉列表。第一个列表在页面加载时填充,结果来自LDAP查询。。因此,该下拉列表工作良好,并向用户显示广告中的活动用户列表 现在这是我的挠头。。。 我的项目中有一个formview控件。我在edititem模板中添加了一个额外的下拉列表。我要做的是将第一个下拉列表的内容复制到第二个下拉列表中。我遇到的问题是,当我尝试为第二个控件编写代码时,我一直会遇到一个错误,即第二个控件尚未声明,这对我来说是有意义的,因为在有人在gridview控件中选

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

现在这是我的挠头。。。 我的项目中有一个formview控件。我在edititem模板中添加了一个额外的下拉列表。我要做的是将第一个下拉列表的内容复制到第二个下拉列表中。我遇到的问题是,当我尝试为第二个控件编写代码时,我一直会遇到一个错误,即第二个控件尚未声明,这对我来说是有意义的,因为在有人在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

“”当我试图写入最后一行以查找该控件时,返回一个错误,表示未声明该控件。我尝试在许多不同的在线论坛上寻找解决方案。但似乎没有什么能给我所需要的。有人知道我如何找到这个控件并在代码隐藏中复制内容吗?提前谢谢

从表面上看,答案可能很简单。您的代码是:

DropDownList(userListEdit = FormView1.FindControl("userListEdit"))
您需要做的是:

Dim ddlList As DropDownList = FormView1.FindControl("userListEdit")
或者,您可以使用DirectCast()直接访问:

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

从表面上看,答案可能很简单。您的代码是:

DropDownList(userListEdit = FormView1.FindControl("userListEdit"))
您需要做的是:

Dim ddlList As DropDownList = FormView1.FindControl("userListEdit")
或者,您可以使用DirectCast()直接访问:

DirectCast(FormView1.FindControl("userListEdit"), DropDownList) //.anyMethod()
@佩奥特男孩 非常感谢你的回答。这向我展示了正确的语法。。从那以后,我必须学习一些关于会话状态的知识,以获得我想要的结果

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

    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 
再次感谢您的帮助!:)

@peyote男孩 非常感谢你的回答。这向我展示了正确的语法。。从那以后,我必须学习一些关于会话状态的知识,以获得我想要的结果

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

    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 
再次感谢您的帮助!:)