2013-06-22 3 views
0

Я использую VB.NET и Visual Studio 2010Связывание данных со списком и добавление опции выбора

У меня есть форма окна с выпадающим списком.

Я заполнить выпадающий с помощью следующей

Dim objSizes As List(Of ASME_Hub_Sizes) = ASME_Hub_Sizes.GetAllHubSizes() 

     If Not objSizes Is Nothing Then 
      With Me.cboSize 
       .DisplayMember = "Size" 
       .ValueMember = "ID" 
       .DataSource = objSizes 
      End With 
     End If 

Это прекрасно работает, но я хотел бы добавить «Выберите размер ...» вариант, но я не уверен, как это сделать.

кажется намного проще сделать это в asp.net, но это меня озадачило

Благодаря Мик

+0

Можете ли вы вставить «Выбрать размер ...» в свою коллекцию objSizes сразу после вашего вызова «GetAllHubSizes»? –

ответ

0

Вы можете попробовать добавить пользовательский objSize объект в коллекцию objSizes, которая имеет ID = 0 и значение = «Выбрать размер ...», так как это ID 0 должен быть наверху (я думаю) и не будет сталкиваться с любыми значениями в вашей базе данных, после сохранения записи вы можете проверить соответствие, чтобы избежать записи объект «Выбрать размер ...» в вашей базе данных. У меня будет немного кода и посмотреть, будет ли это работать ...

Хорошо, у меня был другой взгляд. Вы можете сделать так, как я предложил, но вы должны отсортировать список, прежде чем передавать его в поле со списком. Вот мой пример:

Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
     With Me.ComboBox1 
      .DisplayMember = "Description" 
      .ValueMember = "ID" 
      .DataSource = GetListOfObjects.returnListOFObjects 
     End With 
    End Sub 
End Class 

Public Class dummyObjectForCombo 

    Public Property ID As Integer 
    Public Property Description As String 

    Public Sub New(ByVal id As Integer, 
        ByVal description As String) 
     _ID = id 
     _Description = description 
    End Sub 
End Class 

Public Class GetListOfObjects 

    Public Shared Function returnListOFObjects() As List(Of dummyObjectForCombo) 

     Dim col As New List(Of dummyObjectForCombo) 

     Dim obj0 As New dummyObjectForCombo(-1, "Herp") 
     Dim obj1 As New dummyObjectForCombo(1, "Jamie") 
     Dim obj2 As New dummyObjectForCombo(2, "Bob") 

     col.Add(obj1) 
     col.Add(obj2) 
     col.Add(obj0) 

     'using a lambda to sort by ID as per http://stackoverflow.com/questions/3309188/c-net-how-to-sort-a-list-t-by-a-property-in-the-object 
     Return col.OrderBy(Function(x) x.ID).ToList 

    End Function 

End Class 

Я использовал -1 в качестве верхней записи вместо 0.

Так вы получите список, как обычно, добавьте в дополнительной фиктивной записи, затем отсортировать его в соответствии с приведенным выше кодом, прежде чем назначать его в качестве источника данных combo boxes.

+0

Спасибо, это решило проблему для меня. – user551353

0

просто добавить элемент перед установкой свойства источника данных

C#: cboSize.items.add (...);

+0

Вы не можете изменить коллекцию элементов после привязки к ComboBox. Это необходимо сделать до привязки. – Tim

+0

Я только что забыл об этом, потому что я сделал это с asp.net, однако это можно сделать До привязки, а также задание свойства Text также сделает работу. –