使用ArrayList设置文本和数据字段填充DropDownList

时间:2014-08-04 13:19:07

标签: asp.net vb.net arraylist

我正在尝试根据另一个下拉列表的选择填充带有查询数据的下拉列表。我的第一个查询使用以下代码返回ID列表:

Dim selectQuery = (From train In trainerEntities.TrainerTrainingCompanies
    Where train.TrainingCompanyID = trainingCompany.ID
    Select train.TrainerID).ToList()

然后我创建了一个arraylist和第二个查询

Dim trainers As New ArrayList

For Each trainerID In selectQuery
    Dim selectQuery2 = (From pers In trainerEntities.Persons
                        Where pers.Person_ID = trainerID
                        Select pers.Person_ID, pers.Last_Name).ToList()
    trainers.Add(selectQuery2)
Next

最后,我使用arraylist作为数据源并绑定数据

TrainerDropDownList.DataSource = trainers
TrainerDropDownList.DataBind()

列表填充,但不包含任何数据。它看起来像这样:

System.Collections.Gerneric.List'1[VB$AnonymousType_0'2[System.Int32,System.String]]

调试并查看数组列表时,我会看到适当数量的项目以及每个特定项目中的正确信息。查看列表从上面填充的内容我确定Int32值是Person_ID,我想用于dropdownlist值字段,String值是Last_Name以及我想用于下拉列表文本字段的内容。 / p>

使用:

dropdownlist.DataTextField("Last_Name") 
dropdownlist.DataValueField("Person_ID")

在数据绑定上产生和错误。

does not contain a property with the name 'trainers.Last_Name'

如何正确使用此arraylist作为我的下拉列表的数据源

1 个答案:

答案 0 :(得分:0)

我重新考虑了如何在selectQuery2上收集数据。我没有循环遍历结果,而是将LINQ查询的“where”子句更改为我认为称为lambda表达式的子句。这允许我使用我的选择查询并匹配人员ID。

Dim selectQuery2 = (From pers In trainerEntities.Persons
    Where selectQuery.Any(Function(x) pers.Person_ID.Equals(x))
    Select pers.Person_ID, pers.Last_Name).ToList()

where子句现在基本上说选择Person_ID =任何原始selectQuery结果。

从这里,selectQuery2可以用作数据源,Last_Name和Person_ID作为文本和值字段。

TrainerDropDownList.DataSource = selectQuery2
TrainerDropDownList.DataTextField = "Last_Name"
TrainerDropDownList.DataValueField = "Person_ID"
TrainerDropDownList.DataBind()