2016-02-04 1 views
1

Привет Я пытаюсь связать список объектов с datagridview Связывание существующего списка (Of работает, но я пытаюсь добавить или удалить объект, мой dgv не . обновлениеДобавить строки в класс bound datagridview

Public Class Form1 
    Dim lt As New List(Of Test) 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     lt.Add(New Test("Mac", 2200)) 
     lt.Add(New Test("PC", 1100)) 
     dgv.DataSource = lt 

     lt.Add(New Test("Android", 3300)) 'This line won't appear in the dgv 
    End Sub 
End Class 

Public Class Test 
    Public Sub New(ByVal name As String, ByVal cost As String) 
     _name = name 
     _cost = cost 
    End Sub 
    Private _name As String 
    Public Property Name() As String 
     Get 
      Return _name 
     End Get 
     Set(ByVal value As String) 
      _name = value 
     End Set 
    End Property 
    Private _cost As String 
    Public Property Cost() As String 
     Get 
      Return _cost 
     End Get 
     Set(ByVal value As String) 
      _cost = value 
     End Set 
    End Property 
End Class 

Как добавить или удалить или изменить значение из DGV в список и обратного

NoiseBe

ответ

0

изменить эту строку:

Dim lt As New List(Of Test) 

To:

Imports System.ComponentModel 
... 
Private lt As New BindingList(Of Test) 

Когда содержимое коллекции изменится, вы должны использовать BindingList(Of T). В этой коллекции есть события, связанные с ней, которые информируют об изменениях в содержимом списка.

Если в дополнение к списку содержание, список пунктов будет меняться (например, Test.Name), вы также должны реализовать INotifyPropertyChanged на самом классе.


Другой способ сделать это:

dgv.DataSource = Nothing 
lt.Add(New Test("Android", 3300)) 
dgv.DataSource = lt 

Этот "сбрасывает" DataSource так, что новое содержимое будет отображаться. Однако это означает, что некоторые другие вещи сбрасываются, как выбранные элементы; если вы привязываетесь к элементу управления List/Combo, вам также придется сбросить свойства ValueMember и DisplayMember.

+0

Первое решение работает нормально. Большое спасибо –