Hallo!
Dieser Code zeigt, dass Dir die Datenbindung noch nicht ganz klar ist.
Falls eine Datatable an eine Bindingsource gebunden ist, erfolgt die Aktualisierung
über die Bindingsource - und wenn die an ein Control gehängt wird, läuft es ohne
weiteren Code.
Hier ein Beispiel, bei der ein Dialogformular verwendet wird, um einen neu erstellten
Datensatz zu füllen. Der Datensatz wird in der Hauptform erstellt und per Code die
Primärschlüsselspalte gefüllt.
An den Dialog wird per Eigenschaft ein Binding übergeben, durch das die dortige Textbox
angebunden wird.
Im DatagridView auf der Hauptform wird der Ablauf erkennbar.
Hauptform:
Public Class frmDBEdit2
Dim dt As New DataTable
Dim bs As New BindingSource(dt, Nothing)
Dim WithEvents btnAddNew As New Button _
With {.Text = "Neuer Datensatz", .Parent = Me, _
.Width = 200}
Dim dgv As New DataGridView With _
{.Parent = Me, .Top = 40, .Width = 300, .DataSource = bs, _
.AllowUserToAddRows = False, .AllowUserToDeleteRows = False}
Private Sub frmDBEdit2_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(400, 400)
'Testdaten erstellen
With dt
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Kunde")
.PrimaryKey = {dt.Columns("ID")}
.Rows.Add(1, "Hans Meier")
.Rows.Add(2, "Kurt Müller")
End With
End Sub
Private Sub btnAddNew_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnAddNew.Click
'Neuer Datensatz wird erstellt (incl. Primarschlüssel)
bs.AddNew()
CType(bs.Item(bs.Count - 1), DataRowView).Row("ID") = bs.Count
Using frmAddNewDialog As New frmDBAddnewDialog
With frmAddNewDialog
.HeaderText = "Name des neuen Kunden"
'Datenbindung im Dialog-Formular
.NameBinding = New Binding("Text", bs, dt.Columns( _
"Kunde").ColumnName)
If .ShowDialog() = DialogResult.Cancel Then
bs.RemoveCurrent() 'Datensatz verwerfen
Else
bs.ResetCurrentItem() 'Control aktualisieren
End If
End With
End Using
End Sub
End Class Dialogformular:
Public Class frmDBAddnewDialog
Dim tboName As New TextBox With _
{.Parent = Me, .Top = 10, .Left = 10, .Width = 200}
Dim WithEvents btnOk As New Button With _
{.Parent = Me, .Top = 40, .Left = 10, .Width = 100, _
.Text = "OK", .DialogResult = Windows.Forms.DialogResult.OK}
Dim WithEvents btnCancel As New Button With _
{.Parent = Me, .Top = 40, .Left = 110, .Width = 100, _
.Text = "Cancel", .DialogResult = _
Windows.Forms.DialogResult.Cancel}
Public Property HeaderText() As String
Set(ByVal value As String)
Me.Text = value
End Set
Get
Return Me.Text
End Get
End Property
'Eigenschaft für die Datenbindung
Public Property NameBinding As Binding
Set(ByVal value As Binding)
tboName.DataBindings.Clear()
tboName.DataBindings.Add(value)
End Set
Get
If tboName.DataBindings.Count < 1 Then Return Nothing
Return tboName.DataBindings(0)
End Get
End Property
Public Function ValidateInput() As Boolean
'Hier Code zur Validierung der Eingabe einfügen
Dim input_ok As Boolean
input_ok = Not String.IsNullOrWhiteSpace(tboName.Text)
Return input_ok
End Function
Private Sub frmDBAddnewDialog_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _
Me.FormClosing
If DialogResult = Windows.Forms.DialogResult.OK Then
'Bei Betätigung des OK-Biuttons -> Eingabe-Validierung vornehmen
If Not ValidateInput() Then
MsgBox("Eingabe unzulässig")
e.Cancel = True
End If
End If
End Sub
End Class |