2011-10-05 105 views
0

更新:我没有说清楚,但我的意思是这是一个问题,当我试图仅仅使用类时,我会使用函数返回一个字符串列表。如果我只需要1个物业(目前),我是否需要一个类?

我有一个叫做Account的类。

我有一个数据访问类AccountDAO。

我有一个返回对象的名单像GetAllAccounts各种功能,GetAccountByID等

我想填充一个下拉列表只帐户名称而已。使用对象列表并将它们数据绑定到下拉列表时,它证明速度很慢。

我觉得我应该使用一个简单的“Select Account_Name From blah”类型的语句并返回一个字符串列表,但我不知道如何将其应用到我的类和数据访问类中。

我该如何处理这种困境?

+0

多大帐户对象?对象列表很快,所以不应该成为普遍使用的问题。 – Kirk

+0

@Kirk它非常小,但会随着时间的推移而增长和增长。 – Westicle

回答

0

您可以使用字符串列表s并将字符串列表绑定到下拉列表中,没有问题... DDL可以支持该列表,只是省略了DataTextField和DataValueField道具,并且它会按原样显示帐户名称,该名称可通过ListItem的Text和Value属性访问。

我喜欢使用对象来与应用程序的其他部分保持一致(其他区域可能需要一个类),并且如果由于某种原因,您希望稍后添加AccountKey,如果使用对象,您只需要做的是添加一个属性。否则,如果使用字符串,则必须稍后切换绑定以指向该对象。

HTH。

0

使一个函数只返回一个字符串列表没有任何错误。然而,YOu可能会想知道限制要放入列表中的记录数量并使用某种分页方式会更好。

+0

我试图弄清楚我在那里把这个函数放在Accounts类中,那是我的问题。这是我应该为其寻找分页的情况之一,但该项目上周开始运行,而我现在只是在堵漏洞。 – Westicle

0

假设您使用的是List<>,你可以尝试这样的事:

IEnumerable<string> nameList = accountList.Select(t => t.AccountName); 

,或者您需要一个List

List<string> nameList = accountList.Select(t => t.AccountName).ToList(); 
0

去与你的感情。使用数据读取器选择列表,然后将它们加载到可以绑定到下拉列表的数组列表中。或者,使用类似此方法的方法提供DisplayMember和ValueMember,它们使用一个类(两个值)作为数组列表的成员。这应该给你一个总的想法。 (注:我通常包括在数据访问类(MyBase)这段代码StartReader,_datRdr,ReadNext and_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 
相关问题