更新:我没有说清楚,但我的意思是这是一个关于在我尝试使用类时,如何使用函数返回字符串列表的问题。
我有一个名为Account的课程。
我有一个名为AccountDAO的数据访问类。
我有各种函数可以返回GetAllAccounts,GetAccountByID等对象列表。
我想只使用帐户名称填充下拉列表,而不是其他内容。当使用对象列表并将它们数据绑定到下拉列表时,它证明相当慢。
我觉得我应该使用一个简单的“Select Account_Name From blah”类型语句并返回一个字符串列表,但我不知道如何在我的类和数据访问类中使用它。
我该如何处理这种困境?
答案 0 :(得分:0)
您可以使用字符串列表,s并将字符串列表绑定到下拉列表没问题... DDL可以支持,只需省略DataTextField和DataValueField道具,它将按原样显示帐户名称,哪个名称可以通过ListItem的Text和Value属性访问。
我喜欢使用对象与应用程序的其余部分(其他区域可能需要一个类)一致,如果由于某种原因你想稍后添加AccountKey,如果你使用一个对象,你需要做的就是是添加一个属性。否则,如果使用字符串,则必须稍后切换绑定以指向对象。
HTH。
答案 1 :(得分:0)
通过创建仅返回字符串列表的函数没有任何问题。然而,你可能想知道限制你想要放入列表的记录数量并使用某种分页是不是更好。
答案 2 :(得分:0)
假设你使用的是List<>
,你可以尝试这样的事情:
IEnumerable<string> nameList = accountList.Select(t => t.AccountName);
或者如果您需要List
:
List<string> nameList = accountList.Select(t => t.AccountName).ToList();
答案 3 :(得分:0)
顺其自然。使用datareader选择列表,然后将它们加载到arraylist中,然后绑定到下拉列表。或者,使用类似于我用来提供DisplayMember和ValueMember的方法,该方法使用类(具有两个值)作为arraylist的成员。这应该给你一般的想法。 (注意:我通常将此代码包含在数据访问类(MyBase)中,其中StartReader,_datRdr,ReadNext和_ReaderValid是成员。但总体思路是完整的。)
Public Sub LoadDataSource(ByRef PlantDataSource As PlantSource, Optional ByVal Filter As String = "", Optional ByVal IncludeBlankItem As Boolean = False)
PlantDataSource = New PlantSource
If IncludeBlankItem Then
PlantDataSource.Add(0, "")
End If
If Filter = String.Empty Then
Call StartReader(" Order by PlantName")
Else
Call StartReader(String.Concat(" Where ", Filter, " Order by PlantName"))
End If
If _DatRdr.HasRows Then
While MyBase._ReaderValid
PlantDataSource.Add(PlantId, PlantName)
ReadNext()
End While
End If
Call CloseReader()
End Sub
Private Class PlantListing
Private _PlantList As New ArrayList
Public Sub Add(ByVal PlantId As Integer, ByVal PlantName As String)
_PlantList.Add(New PlantDataItem(PlantId, PlantName))
End Sub
Public ReadOnly Property List() As ArrayList
Get
Return _PlantList
End Get
End Property
End Class
Private Class PlantDataItem
Private _PlantId As Integer
Private _PlantName As String
Public Sub New(ByVal pPlantId As Integer, ByVal pPlantName As String)
Me._PlantId = pPlantId
Me._PlantName = pPlantName
End Sub
Public ReadOnly Property PlantName() As String
Get
Return _PlantName
End Get
End Property
Public ReadOnly Property PlantId() As Integer
Get
Return _PlantId
End Get
End Property
Public ReadOnly Property DisplayValue() As String
Get
Return CStr(Me._PlantId).Trim & " - " & _PlantName.Trim
End Get
End Property
Public Overrides Function ToString() As String
Return CStr(Me._PlantId).Trim & " - " & _PlantName.Trim
End Function
End Class