#asp.net #vb.net #class
#asp.net #vb.net #класс
Вопрос:
Обновление: я не уточнил, но я имел в виду, что это вопрос о том, где / как я буду использовать функцию для возврата списка строк, когда я пытаюсь просто работать с классами.
У меня есть класс под названием Account .
У меня есть класс доступа к данным под названием AccountDAO.
У меня есть различные функции, которые возвращают списки объектов, таких как GetAllAccounts, GetAccountByID и т.д.
Я хочу заполнить выпадающий список только именами учетных записей и ничем другим. Это оказывается довольно медленным при использовании списков объектов и привязке их к dropdownlist.
Я чувствую, что должен использовать простой оператор типа «Выберите Account_Name из blah» и возвращать список строк, но я не знаю, как использовать это в моем классе и классе доступа к данным.
Как мне справиться с этим затруднительным положением?
Комментарии:
1. Насколько велик объект Account? Списки объектов создаются быстро, поэтому это не должно быть проблемой для использования в целом.
2. @Kirk он очень маленький, но со временем будет расти и расти.
Ответ №1:
Вы можете использовать список string, s и привязать список строк к выпадающему списку без проблем … DDL может это поддерживать, просто оставьте реквизиты DataTextField и DataValueField, и он отобразит имя учетной записи как есть, которое это имя будет доступно через свойство Text и Value ListItem .
Мне нравится использовать объекты для согласования с остальной частью приложения (для каких других областей может потребоваться класс), и если по какой-то причине вы захотите добавить AccountKey позже, если вы используете объект, все, что вам нужно сделать, это добавить свойство. В противном случае, если вы используете строки, вам придется позже переключить привязку, чтобы указать на объект.
HTH.
Ответ №2:
Нет ничего плохого в создании функции, которая возвращает только список строк. Однако вы можете задаться вопросом, не лучше ли ограничить количество записей, которые вы хотите поместить в список, и использовать какую-то подкачку.
Комментарии:
1. Я пытаюсь понять, куда я помещаю эту функцию в классе Accounts , это моя проблема. Это одна из тех ситуаций, когда я должен проработать подкачку для него, но проект был запущен на прошлой неделе, и я просто затыкаю дыры в данный момент.
Ответ №3:
Предполагая, что вы используете a List<>
, вы можете попробовать что-то вроде этого:
IEnumerable<string> nameList = accountList.Select(t => t.AccountName);
Или если вам нужно List
:
List<string> nameList = accountList.Select(t => t.AccountName).ToList();
Ответ №4:
Доверьтесь своим чувствам. Используйте 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 amp; " - " amp; _PlantName.Trim
End Get
End Property
Public Overrides Function ToString() As String
Return CStr(Me._PlantId).Trim amp; " - " amp; _PlantName.Trim
End Function
End Class