Quantcast
Channel: Windows Forms Data Controls and Databinding forum
Viewing all articles
Browse latest Browse all 2535

TextBoxes using parent control BindingContexts don't display data value

$
0
0

I am having a problem when I try to bind to text boxes to separate BindingContexts (via a container control such as a GroupBox). The textboxes don't display the bound value. (This example is based on the bindingcontext documentation here)

Here is the code:

Dim ds As New DataSet1

Public Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    BindControls()
    GetData()
End Sub

Private Sub BindControls()
    Dim bcG1 As New BindingContext()
    Dim bcG2 As New BindingContext()

    GroupBox1.BindingContext = bcG1
    'GroupBox2.BindingContext = bcG2

    TextBox1.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' groupbox1
    TextBox2.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' groupbox2
    TextBox3.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' form
End Sub

When I run the form Textbox3 (at the form level) and textbox2 (in GroupBox2) are synchronized as expected and TextBox2 displays the value of OrderKey. However, Textbox1 (in GroupBox1) does not show any values. I have determined that GroupBox1 is indeed using a separate BindingContext and position commands do move to new rows independent of the form. If I comment out setting GroupBox1's BindingContext it behaves as Texbox2, synchronized at the form level. If I uncomment setting Groupbox2's BindingContext, it behaves as Textbox1, unsynchronized but doesn't display any values in the textbox.

I also tested setting GropuBox2.BindingContext = Me.BindingContext. This linked the two but TextBox2 no longer showed a value. Seems that if the GroupBox's DataContext is set, the contained TextBoxes' Text properties don't get bound.

Can anybody see what I'm missing?

Here is the full code:

Imports System
Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

Dim ds As New DataSet1

Public Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    BindControls()
    GetData()
End Sub

Private Sub BindControls()
    Dim bcG1 As New BindingContext()
    Dim bcG2 As New BindingContext()

    GroupBox1.BindingContext = bcG1
    'GroupBox2.BindingContext = bcG2

    TextBox1.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' groupbox1
    TextBox2.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' groupbox2
    TextBox3.DataBindings.Add("Text", ds, "Orders.OrderKey")    ' form
End Sub

' ** groupbox1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    GroupBox1.BindingContext(ds, "Orders").Position -= 1
    Dim drv As DataRowView = CType(GroupBox1.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox5.Text = drv("OrderKey")
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    GroupBox1.BindingContext(ds, "Orders").Position += 1
    Dim drv As DataRowView = CType(GroupBox1.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox5.Text = drv("OrderKey")
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    GroupBox2.BindingContext(ds, "Orders").Position -= 1
    Dim drv As DataRowView = CType(GroupBox2.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox6.Text = drv("OrderKey")
End Sub


' ** groupbox2
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    GroupBox2.BindingContext(ds, "Orders").Position += 1
    Dim drv As DataRowView = CType(GroupBox2.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox6.Text = drv("OrderKey")
End Sub

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    Me.BindingContext(ds, "Orders").Position -= 1
    Dim drv As DataRowView = CType(Me.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox4.Text = drv("OrderKey")
End Sub

' ** Form
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    Me.BindingContext(ds, "Orders").Position += 1
    Dim drv As DataRowView = CType(Me.BindingContext(ds, "Orders").Current, DataRowView)
    TextBox4.Text = drv("OrderKey")
End Sub

Private Sub GetDataButton_Click(sender As Object, e As EventArgs) Handles GetDataButton.Click
    GetData()
End Sub

Public Sub GetData()
    ds.Clear()
    Dim ota As New DataSet1TableAdapters.OrdersTableAdapter
    ota.Adapter.SelectCommand = New SqlCommand("SELECT OrderKey, CustomerFK, OrderDate, DeliveryMethod, Special_Instr, " & _"TotalOrderAmount " & _"FROM Orders ", ota.Connection)
    ota.Adapter.Fill(ds)
End Sub
End Class




Carl


Viewing all articles
Browse latest Browse all 2535

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>