Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm Data Binding / November 2005

Tip: Looking for answers? Try searching our database.

Synchronizing values

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Gabriel Michaud - 09 Jul 2004 03:16 GMT
Hello,

I'm currently reading on .NET data binding and I'm trying to do one of the
sample programs in the book. There is a text box bound to a property of an
array, and a previous/next button. The book mentions that if there are many
controls bound to the same element I do not have to take care of anything
and the values will be synchronized automatically. It does work, however I
need to go to the next row and then go back to see my change applied on all
the text boxes.

I also tried changing the array in code to see if the form would be updated
to reflect my changes, but it is not updated.

Finally, I also tried hooking the CurrencyManager class to see if I could
get the ItemChanged() event, but I'm only getting the CurrentChanged()
event.

I saw some post regarding the need to have a <PropertyName>Changed event,
but this did not help. Here's part of my code. Am I doing anything wrong? Is
this the expected behaviour? If so, how can I force the databinding to
resynchronize? And finally, when would the ItemChanged event fire?

Thanks!

Public Class TrainingForm
   Inherits System.Windows.Forms.Form

   Private m_Candidates() As Candidate = _
       {New Candidate("Bill Gates", "305"), _
       New Candidate("Steve Ballmer", "320")}

   Private WithEvents m_CurrencyManager As CurrencyManager

   Private Sub TrainingForm_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
       CandidateName.DataBindings.Add("Text", m_Candidates,
"CandidateName")
       ExamNumber.DataBindings.Add("Text", m_Candidates, "ExamNumber")
       TextBox1.DataBindings.Add("Text", m_Candidates, "ExamNumber")
       Label3.DataBindings.Add("Text", m_Candidates, "ExamNumber")

       m_CurrencyManager = DirectCast(Me.BindingContext.Item(m_Candidates),
CurrencyManager)
   End Sub

   Private Sub NextButton_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles NextButton.Click
       Me.BindingContext(m_Candidates).Position += 1
   End Sub

   Private Sub PreviousButton_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles PreviousButton.Click
       Me.BindingContext(m_Candidates).Position -= 1
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
       m_Candidates(0).ExamNumber = "123"
   End Sub

   Private Sub m_CurrencyManager_ItemChanged(ByVal sender As Object, ByVal
e As System.Windows.Forms.ItemChangedEventArgs) Handles
m_CurrencyManager.ItemChanged
       MsgBox("Item Changed")
   End Sub

   Private Sub m_CurrencyManager_CurrentChanged(ByVal sender As Object,
ByVal e As System.EventArgs) Handles m_CurrencyManager.CurrentChanged
       MsgBox("Current changed")
   End Sub
End Class

Public Class Candidate
   Private m_ExamNumber As String
   Private m_CandidateName As String

   Public Event ExamNumberChanged As EventHandler
   Public Event CandidateNameChanged As EventHandler

   Public Property ExamNumber() As String
       Get
           Return m_ExamNumber
       End Get
       Set(ByVal Value As String)
           m_ExamNumber = Value
           RaiseEvent ExamNumberChanged(Me, New EventArgs)
       End Set
   End Property

   Public Property CandidateName() As String
       Get
           Return m_CandidateName
       End Get
       Set(ByVal Value As String)
           m_CandidateName = Value
           RaiseEvent CandidateNameChanged(Me, New EventArgs)
       End Set
   End Property

   Public Sub New(ByVal candidateName As String, Optional ByVal examNumber
As String = "")
       m_CandidateName = candidateName
       m_ExamNumber = examNumber
   End Sub
End Class
"Ying-Shen Yu[MSFT]" - 09 Jul 2004 09:46 GMT
Hi Gabriel,

when you edit text in a TextBox, the TextBox will enter "edit" mode, it
will not update the underlying datasource under you move to another
position in Currencymanager or call EndCurrentEdit method to leave the
"edit" mode explicitly.

Also, if you want  the UI reflect the changes when you update the
datasource by code, you need implement a collection and implement
IBindingList interface to notify the databinding mechanism. You may take a
look at the doc of IBindingList interface , there is an sample code in MSDN
library.

If you just want to update the UI after changing datasource by code, you
may call Binding.SuspendBinding and then call  Binding.ResumeChange to
force an update.

Does this answer your question?
If not, please feel free to let me know your question, maybe I can try to
explain in some other way.

Thanks!

Best regards,

Ying-Shen Yu [MSFT]
Microsoft Community Support
Get Secure! - www.microsoft.com/security

This posting is provided "AS IS" with no warranties and confers no rights.
This mail should not be replied directly, please remove the word "online"
before sending mail.
Gabriel Michaud - 09 Jul 2004 12:19 GMT
This answers my question. Thank you very much for the quick answer.

Gabriel

> Hi Gabriel,
>
[quoted text clipped - 28 lines]
> This mail should not be replied directly, please remove the word "online"
> before sending mail.
nguyencaoky - 21 Nov 2005 12:01 GMT
Could you give me your sample code that can reflect data source'
changes to binded control? I tried to follow tips o
http://blogs.msdn.com/dchandnani/ but it cannot work.

Thanks,
K

--
nguyencaok

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.