2011-10-05 168 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 
相關問題