如果我只需要一个房产(目前),我需要一个班级吗?

时间:2011-10-05 14:21:29

标签: asp.net vb.net class

更新:我没有说清楚,但我的意思是这是一个关于在我尝试使用类时,如何使用函数返回字符串列表的问题。

我有一个名为Account的课程。

我有一个名为AccountDAO的数据访问类。

我有各种函数可以返回GetAllAccounts,GetAccountByID等对象列表。

我想只使用帐户名称填充下拉列表,而不是其他内容。当使用对象列表并将它们数据绑定到下拉列表时,它证明相当慢。

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

我该如何处理这种困境?

4 个答案:

答案 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