Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: У Dropdownlist привязать DataTextField к ToString Добавлено: 10.11.05 18:48  

Автор вопроса:  Павел | Web-сайт: www.vbnet.ru | ICQ: 326066673 
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-сайт: softvito.narod2.ru
 Профиль | | #1
Добавлено: 11.11.05 00:47
Трудновато понять проблематику, вот если бы UML диаграмка, все сразу стало бы наглядно.

А вот в качестве текста хочу чтобы отображался результат метода ToString
Вот такой код приводит к тому, что в тексте элементов отображаются те же ID.


Я конечно могу ошиаться, но в представленном коде не хватает
Me.ObjectsList.DataTextField=.......

На второй вопрос корректно без схемы ответить сложно ИМХО.
З.Ы. Я ореинтировался на старую НЕТ, новой у меня пока что нет.

Ответить

Номер ответа: 2
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #2
Добавлено: 11.11.05 07:59
DataTextField позволяет привязываться только к свойствам (возможно еще к полям), привязать с его помощью DropDownList к методу ToString у меня не получилось.

Насчет диаграмм: UML я не использую. Да в принципе и диаграмма не особо нужна, т.к. задача стоит четко - привязать текстовое значение элемента DropDownList к ToString.

Но поясню о схеме классов на примере..

Public Class DomainObject
   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-сайт: softvito.narod2.ru
 Профиль | | #3
Добавлено: 11.11.05 14:40
Это возможно не совсем то, в общем посмотри...

Dim dt As New DataTable
            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()


            ;DropDownList1.DataSource = ListBox1.DataSource 'связываем
            'DropDownList1.DataTextField = "ID" ' выводим как число
            ;DropDownList1.DataValueField = "IDstring" ' выводим как строку
            ;DropDownList1.DataBind()

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам