Solved

Databound DataGridView not refreshing correctly

Posted on 2011-09-08
4
486 Views
Last Modified: 2012-05-12
I have a form that contains a datagridview with it's datasource set to a bindinglist(of T) and several controls.  When a row is selected in the datagridview, I bind that row's DataBoundItem properties to the controls.  When I need a new record, the user clicks an "Add New" button which in turn adds a record the BindingList(of T).  All of this works and I see the new row in the datagridview, however; when I edit the values using the controls, the datagridview only reflects the first value I change.  If I then change rows in the datagridview or highlight the current row, the values update.  How can I get the datagridview to keep in sync with the underlying datasource?

A short example:
Imports System.ComponentModel

Public Class frmMisc
Private Class Test
        Public Sub New()
        End Sub

        Public Sub New(ByVal one As String,
                       ByVal two As String)
            Me.One = one
            Me.Two = two
        End Sub

        Public Property One
        Public Property Two
    End Class

    Private _data As BindingList(Of Test)


    Private Sub Misc_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        _data = New BindingList(Of Test)
        _data.Add(New Test("1", "2"))
        DataGridView1.DataSource = _data
    End Sub

    Private Sub DataGridView1_RowEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowEnter
        Dim row As Test = DataGridView1.Rows(e.RowIndex).DataBoundItem
        If row IsNot Nothing Then
            TextBox1.DataBindings.Clear()
            TextBox1.DataBindings.Add("Text", row, "One")
            TextBox2.DataBindings.Clear()
            TextBox2.DataBindings.Add("Text", row, "Two")
        End If
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        _data.Add(New Test)
    End Sub
End Class

Open in new window


I didn't include the designer code for brevity.

Thanks,
Lance
0
Comment
Question by:melance42
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 41

Assisted Solution

by:graye
graye earned 500 total points
ID: 36511151
You need to add the WithEvents key word when defining your BindingList.  For example:

Private WithEvents _data As BindingList(Of Test)

http://msdn.microsoft.com/en-us/library/aty3352y(v=VS.90).aspx
0
 

Author Comment

by:melance42
ID: 36511493
Graye,
I added the WithEvents key word and it I still don't see the data grid view syncing with the object.  Am I going to have to force a data refresh in the data grid view inside of the BindingList events?  It seems there should be a way to do this without having to force the binding to update manually.

Thanks,
Lance

You need to add the WithEvents key word when defining your BindingList.  For example:

Private WithEvents _data As BindingList(Of Test)

http://msdn.microsoft.com/en-us/library/aty3352y(v=VS.90).aspx
0
 
LVL 41

Accepted Solution

by:
graye earned 500 total points
ID: 36511617
There's a pretty good example at the bottom of this page.  It shows how to configure the bindinglist to allow add/remove and to raise events upon changes

http://msdn.microsoft.com/en-us/library/ms132679.aspx
0
 

Author Comment

by:melance42
ID: 36512337
Graye,
Thanks for the link.  It still isn't acting in the exact manner that I would like, however; if I handle the validated event of my detail controls and call the ResetBindings method things seem to work well enough.  I just hate to have to handle all of those events.

Thanks,
Lance
0

Featured Post

On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
There's a multitude of different network monitoring solutions out there, and you're probably wondering what makes NetCrunch so special. It's completely agentless, but does let you create an agent, if you desire. It offers powerful scalability …
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question