Страница: 1 |
Страница: 1 |
Вопрос: У Dropdownlist привязать DataTextField к ToString
Добавлено: 10.11.05 18:48
Автор вопроса: Павел | Web-сайт:
ASP .NET 2.0
Есть DropDownList. Он привязывается к List(Of DomainObject) (в C# то List<DomainObject> вроде бы). В качестве DataValueField я устанавливаю ID. А вот в качестве текста хочу чтобы отображался результат метода ToString (унаследованного от Object). Как это можно сделать?
Вот такой код приводит к тому, что в тексте элементов отображаются те же ID.
Dim Objects As List(Of DomainObject) = Mappers.GetAllObjects(PermissionType.Resource.Name)
Me.ObjectsList.DataSource = Objects
Me.ObjectsList.DataValueField = "ID"
Me.ObjectsList.DataBind()
К вопросу о том, зачем это нужно: есть несколько классов, унаследованных от DomainObject. У всех их естьсвойство ID, унаследованное от DomainObject - уникальный идентификатор. А вот остальные свойства у всех разные, а отображаемый текст генерируется методом ToString. И мне надо, не зная изначально тип выводимых в DropDown объектов (зная лишь, что у всех их предок - DomainObject) все их корректно отобразить.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #1
Добавлено: 11.11.05 00:47
Трудновато понять проблематику, вот если бы UML диаграмка, все сразу стало бы наглядно.
Вот такой код приводит к тому, что в тексте элементов отображаются те же ID.
Я конечно могу ошиаться, но в представленном коде не хватает
Me.ObjectsList.DataTextField=.......
На второй вопрос корректно без схемы ответить сложно ИМХО.
З.Ы. Я ореинтировался на старую НЕТ, новой у меня пока что нет.
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 11.11.05 07:59
DataTextField позволяет привязываться только к свойствам (возможно еще к полям), привязать с его помощью DropDownList к методу ToString у меня не получилось.
Насчет диаграмм: UML я не использую. Да в принципе и диаграмма не особо нужна, т.к. задача стоит четко - привязать текстовое значение элемента DropDownList к ToString.
Но поясню о схеме классов на примере..
Public ReadOnly Property ID As Int32
'...
End Class
Public Class Forum
Inherits DomainObject
Public Property Name As String
'...
Public Overrides Function ToString() As String
Return Me.Name
End Function
End Class
Public Class UserLockInfo
Inherits DomainObject
Public Property User As User
'...
Public Property DateLockUntil As Date
'...
Public Overrides Function ToString() As String
Return "Юзер " & Me.User.UserName & " заблокирован до " & Me.DateLockUntil.ToString
End Function
End Class
Каждый объект имеет свою внутреннюю структуру и сам решает, какое у него будет отображаемое значение и на каких данных оно строится. Однако ID'шники у всех объектов имеются в наличии, так как все классы унаследованы от DomainObject.
В коде: я получаю откуда-то List(Of DomainObject) (или в .NET 1.1 это мог быть ArrayList, заполненный экземплярами DomainObject), и мне нужно его впихнуть в DropDownList так, чтобы ValueField был "ID", а вот оображаемое значение бралось из метода ToString объекта.
Номер ответа: 3
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #3
Добавлено: 11.11.05 14:40
Это возможно не совсем то, в общем посмотри...
Dim dr As DataRow
dt.Columns.Add(New DataColumn("ID", GetType(Double))) ' добавляем колнку типа Double
dt.Columns.Add(New DataColumn("IDstring", GetType(String))) ' добавляем колнку типа String
Dim i As Integer
For i = 0 To 8
dr = dt.NewRow()
dr(0) = i ' в первой числа
dr(1) = "Item " + i.ToString() 'во второй строки
dt.Rows.Add(dr)
Next i
Dim dv As New DataView(dt) 'создаем источник данных
ListBox1.DataSource = dv
'ListBox1.DataTextField = "ID" ' выводим как число
'ListBox1.DataTextField = "IDstring" ' выводим как строку
'ListBox1.DataValueField = "ID" ' выводим как число
ListBox1.DataValueField = "IDstring" ' выводим как строку
ListBox1.DataBind()
 ropDownList1.DataSource = ListBox1.DataSource 'связываем
'DropDownList1.DataTextField = "ID" ' выводим как число
 ropDownList1.DataValueField = "IDstring" ' выводим как строку
 ropDownList1.DataBind()