ABL - The Problem Solver - .Net FAQ
 

Home
Mission
News
Blog
Tools
FAQ
Publications
Downloads
Contact
Contents

 

Frequently asked questions

.NET FAQ Visual FoxPro FAQ

 


Databinding to business objects and exceptions

One cool, and not quite new, feature of Visual Studio 2005 is data binding to your own business objects. Just create a new business object class, add a property, add it to the Data Sources window as an object data source and drag it onto your form. Simple as that and you are good to go. However as usual there is a gotcha :-( It throw an exception in a property get or get during the data binding the exception is eaten by the DataBindings object. There are two ways around this, either pass False as the formattingEnabled parameters or add an event handler to the BindingComplete event and check for the Exception property being set. The first option seems the easiest but isn’t :-( Even if you set the Format type to no formatting in the Formatting and Advanced Binding dialog the formattingEnabled will still be true. That leaves the second option. To handle the BindingComplete event you need to ass an event handler to all Binding objects on the form. Not difficult once you have a reference to all controls. The following code does just that.

 

Public Class Form1
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each control As Control In GetAllControls(Me)
           
For Each binding As Binding In control.DataBindings
                AddHandler binding.BindingComplete, AddressOf BindingCompleteHandler
            Next
        Next
    End Sub

    Private Sub BindingCompleteHandler(ByVal sender As Object, ByVal e As BindingCompleteEventArgs)

        If e.Exception IsNot Nothing Then
            Throw New Exception("Unhandled exception during databinding actions.", e.Exception)
        End If
    End Sub

    Private Function GetAllControls(ByVal container As Control) As List(Of Control)
        Dim result As New List(Of Control)
        Dim pos As Integer = 0
        result.Add(container)

       
Do While pos < result.Count
            For Each control As Control In result(pos).Controls
                result.Add(control)
            Next
            pos += 1
        Loop

        Return result
    End Function
End Class

Public Class SomeData
    Private _lastName As String = "Maurice de Beijer"
    Public Property LastName() As String
        Get
            Throw New Exception("Get: " + _lastName)
            Return _lastName
        End Get
        Set(ByVal value As String)
            _lastName = value
        End Set
    End Property
End Class


 

Send mail to webmaster@TheProblemSolver.nl with questions or comments about this web site.
Copyright © 1995 - 2012 ABL - The Problem Solver
Last modified: December 5th 2011
.NET Events
RSS 2.0