Forums Neueste Beiträge
 

zwei datengebundene Controls gegenseitig aktualisieren

04/01/2008 - 18:28 von Lutz Elßner | Report spam
Ich habe ein DataGridView und ein NumericUpDown Control, in dem eine Zahl
aus der aktuellen Row des DGV nochmals angezeigt und hoch-runter gezàhlt
werden kann. BindingSource sei Dank aktualisieren sich die Werte gegenseitig
wenn der Datensatz gewechselt wird.

König Kunde würde sich nun freuen, wenn die im DGV sichtbare Zahl
gleichzeitig mit hoch-runter gezàhlt wird, wenn man das NumericUpDown
Control betàtigt.

Es gibt bestimmt 200 Möglichkeiten so was zu synchronisieren. Die meisten
haben unangenehme Nebenwirkungen wie Ereignisse, die gefeuert werden, wo sie
nicht hin gehören..

Wie ist es richtig, mit einer sauberen Datenbindung ohne Tricks, zwei
Controls, die an das selbe DataItem gebunden sind, zu synchronisieren, ohne
dass navigiert werden muss?

Lutz
 

Lesen sie die antworten

#1 Peter Fleischer
08/01/2008 - 07:20 | Warnen spam
"Lutz Elßner" <www.vb-hosting.de> schrieb im Newsbeitrag
news:
Ich habe ein DataGridView und ein NumericUpDown Control, in dem eine Zahl
aus der aktuellen Row des DGV nochmals angezeigt und hoch-runter gezàhlt
werden kann. BindingSource sei Dank aktualisieren sich die Werte
gegenseitig
wenn der Datensatz gewechselt wird.

König Kunde würde sich nun freuen, wenn die im DGV sichtbare Zahl
gleichzeitig mit hoch-runter gezàhlt wird, wenn man das NumericUpDown
Control betàtigt.

Es gibt bestimmt 200 Möglichkeiten so was zu synchronisieren. Die meisten
haben unangenehme Nebenwirkungen wie Ereignisse, die gefeuert werden, wo
sie
nicht hin gehören..

Wie ist es richtig, mit einer sauberen Datenbindung ohne Tricks, zwei
Controls, die an das selbe DataItem gebunden sind, zu synchronisieren,
ohne
dass navigiert werden muss?



Hi Lutz,
Aktualisiere im ValueChanged des NumericUpDown einfach den Inhalt in der
DataSoure. Eine Lösungsvariante habe ich mal als Demo nachfolgend
dargestellt:

Option Infer On
Option Strict On

Public Class Form1

Dim bs As New BindingSource

Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
bs.DataSource = TestData.GetDataTable

Dim nud As New NumericUpDown
Me.Controls.Add(nud)
With nud
.Dock = DockStyle.Top
.DataBindings.Add("Value", bs, "n")
AddHandler .ValueChanged, AddressOf nudValueChanged
End With

Dim dgv As New DataGridView
Me.Controls.Add(dgv)
With dgv
.Dock = DockStyle.Fill
.DataSource = bs
End With
End Sub

Private Sub nudValueChanged(ByVal s As Object, _
ByVal e As EventArgs)
bs.EndEdit()
End Sub

End Class

Public Class TestData
Shared dt As New DataTable("Tab1")
Shared Sub New()
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("col1", GetType(String))
dt.Columns.Add("n", GetType(Integer))
With dt
For i = 1 To 10
Dim r1 = .NewRow
r1(0) = i
r1(1) = "Row " & i.ToString
r1(2) = 2 * i
.Rows.Add(r1)
Next
End With
End Sub
Public Shared Function GetDataTable() As DataTable
Return dt
End Function
End Class


Viele Gruesse

Peter

Ähnliche fragen