Наследование DropDownList и добавление пользовательских значений с использованием его DataSourceObject - PullRequest
0 голосов
/ 08 июня 2009

Я наследую DropDownList, чтобы добавить два пользовательских элемента ListItems. Первый элемент - «Выбрать один ...», а второй элемент добавляется в конце, его значение - «Пользовательский».

Я переопределяю DataBind и использую следующий код:

    Dim data As List(Of ListItem) = CType(DataSource, List(Of ListItem))
    data.Insert(0, New ListItem("Select one...", SelectOneListItemValue))
    If DisplayCustomOption Then
        data.Insert(data.Count, New ListItem("Custom", CustomListItemValue))
    End If
    DataSource = data
    MyBase.DataBind()

Проблема в том, что этот код не будет работать, если DataSource - это что-то отличное от ListItem. Есть ли лучший способ сделать это?

Ответы [ 2 ]

0 голосов
/ 08 июня 2009

Вы можете просто оставить привязку в базе данных и добавить свои специальные элементы в обработчик событий DataBound.

Protected Sub MyDropDownList_DataBound(sender As Object, e As EventArgs) _ 
    Handles MyDropDownList.DataBound 

        MyBase.Items.Insert(0, New ListItem("Select One...", SelectOneListItemValue))

        If DisplayCustomOption Then
            MyBase.Add(New ListItem("Custom", Custom))
        End If
End Sub

(Мой VB.NET ограничен, поэтому вам может потребоваться настроить синтаксис)

0 голосов
/ 08 июня 2009

Можно предположить, что источник данных всегда наследует IList, и в этом случае вы можете сделать следующее:

Dim data As IList = CType(DataSource, IList)
data.Insert(0, New ListItem("Select one...", SelectOneListItemValue))
' And so on...

Конечно, это предполагает, что каким бы ни был источник данных, он позволяет добавлять объекты типа ListItem. Но это может быть достаточно общим для того, что вам нужно.

...