2016-07-13 46 views
0

Ich habe ein .NET-Projekt, das ein UltraWinGrid enthält, um Daten aus einer Datenbanktabelle anzuzeigen. Auf dem Formular mit dem UWG habe ich 3 Knöpfe; 'Neue Daten', 'Daten bearbeiten' und 'Daten löschen'. Die ersten beiden öffnen neue Formulare mit Steuerelementen, über die die zu speichernden Daten eingegeben/bearbeitet werden können. Die Speicherfunktion funktioniert einwandfrei, aber wenn ich das Formular schließe, um das Anfangsformular (mit dem UWG) zu sehen, wurden die Daten nicht aktualisiert, und dies nur, wenn ich sie schließe und wieder öffne.UltraWinGrid aktualisieren auf separaten Formularschaltfläche drücken

Also, gibt es eine Möglichkeit, dass ich die UWG aktualisieren kann, wenn ich die Schaltfläche Speichern auf dem neuen Formular drücke? (Ich habe bereits versucht, die Funktion erneut aufrufen, die die UWG lädt, aber das funktioniert nicht, wie ich es nicht eine gemeinsame Methode machen kann aufgrund der Verbindungen)

speichern Funktionscode:

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 

    Dim m_cn As New OleDbConnection 
    m_cn = m_database.getConnection() 


    If txtFirstName.Text = "" Then 
     MsgBox("First name cannot be blank") 

    ElseIf txtLastName.Text = "" Then 
     MsgBox("Last name cannot be blank") 

    ElseIf txtAge.Text = "" Then 
     MsgBox("Age cannot be blank") 

    ElseIf txtPostCode.Text = "" Then 
     MsgBox("Postcode cannot be blank") 

    Else 
     Dim personID As Integer = database.SaveNewPerson(txtFirstName.Text, txtLastName.Text, txtAge.Text, txtPostCode.Text, m_cn) 

     MsgBox("Save successful") 

     txtFirstName.Text = "" 
     txtLastName.Text = "" 
     txtAge.Text = "" 
     txtPostCode.Text = "" 

    End If 

End Sub 

Code, lädt die UWG:

Public Sub getPeople() 

    Try 
     Dim sql As String = "SELECT * FROM tblPerson" 
     Dim cm As New OleDbCommand(sql, m_database.getConnection()) 
     Dim da As New OleDbDataAdapter(cm) 
     Dim dt As New DataTable() 
     da.Fill(dt) 
     ugData.DataSource = dt 

    Catch Ex As Exception 
     MsgBox("Could not load people") 
    End Try 

End Sub 

Antwort

2

Sie sollen die getPeople Funktion in der anrufenden Form, nicht in der Sparform nennen.
Sie müssen nur wissen, ob das Speicherungsformular korrekt beendet wurde oder nicht, und diese Information ist als Rückgabewert für den Aufruf an ShowDialog verfügbar. Ihre Schaltfläche, die die Personendaten speichert sollte die DialogResult Eigenschaft auf OK und dann sollte dieser Code für Sie arbeiten

' Open the form that inserts a new person 
' Change that name to your actual form class name... 
Using fp = new frmPerson() 

    ' If the user presses the button to save and everything goes well 
    ' we get the DialogResult property from the button pressed 
    if fp.ShowDialog() = DialogResult.OK Then 

     ugData.DataSource = Nothing 
     getPeople() 

    End If 
End Using 

Hinweis den Punkt wenn alles gut geht. Dies bedeutet, dass wenn Sie in der Prozedur zum Speichern von Schaltflächen etwas nicht gut gehen, sollten Sie das Schließen des Formulars blockieren und die Eigenschaft DialogResult in None ändern.

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click 

    Dim m_cn As New OleDbConnection 
    m_cn = m_database.getConnection() 


    If txtFirstName.Text = "" Then 

     MsgBox("First name cannot be blank") 
     Me.DialogResult = DialogResult.None 
    ElseIf txtLastName.Text = "" Then 
     MsgBox("Last name cannot be blank") 
     Me.DialogResult = DialogResult.None 
    ElseIf txtAge.Text = "" Then 
     MsgBox("Age cannot be blank") 
     Me.DialogResult = DialogResult.None 
    ElseIf txtPostCode.Text = "" Then 
     MsgBox("Postcode cannot be blank") 
     Me.DialogResult = DialogResult.None 
    Else 
     Dim personID As Integer = database.SaveNewPerson(txtFirstName.Text, txtLastName.Text, txtAge.Text, txtPostCode.Text, m_cn) 

     MsgBox("Save successful") 

     txtFirstName.Text = "" 
     txtLastName.Text = "" 
     txtAge.Text = "" 
     txtPostCode.Text = "" 
    End If 
End Sub 
+1

Hallo Steve, danke für die Antwort, wie würde sich dieser Code für vb.net ändern, da ich C# nicht benutze oder verstehe? – David

+0

Fixed it now ... – Steve

+1

Schön, danke! – David