2013-02-05 48 views
0

我有點奇怪,我一直在網上查找,但無法找到任何特定於我的問題。希望有人能幫助我。從Datagrid MDI更新/保存信息到MySQL數據庫MDI

我有一個從MySQL讀取信息的VB.Net 2012應用程序。閱讀很好,它填充正確,但我有問題的工作如何保存更改回來。

信息從DataTable顯示到DataGridView中。該應用程序是一個MDI應用程序,在任何情況下,可能有多個TableEditor表單作爲子項打開。

這是我的信息加載功能:

Public Function get_SQL(ByVal SQLquery As String) As DataTable 
    Try 
     Dim myCommand As New MySqlCommand 
     Dim myAdapter As New MySqlDataAdapter 
     Dim myData As New DataTable 
     Dim MysqlConn As New MySqlConnection 

     MysqlConn.ConnectionString = "server=" & sqlServer & ";" _ 
      & "user id=" & sqlUsername & ";" _ 
      & "password=" & sqlPassword & ";" _ 
      & "database=" & sqlDatabase 

     MysqlConn.Open() 
     myCommand.Connection = MysqlConn 
     myCommand.CommandText = SQLquery 
     myAdapter.SelectCommand = myCommand 
     myAdapter.Fill(myData) 
     MysqlConn.Close() 
     MysqlConn.Dispose() 
     Return (myData) 
    Catch ex As Exception 
     Main.lblStatus.Text = "SQL Connection Error" 
     errMsg = ex.ToString 
     errForm = "SQL Connection" 
     errWrite() 
    End Try 
End Function 

和信息加載到子窗體上的負荷是這樣的:

Private Sub SQLeditor_Load(sender As Object, e As EventArgs) Handles Me.Load 
    ToolStrip1.Visible = False 
    Select Case sqlclick 
     Case Is = "Office Details" 
      SQLdata = get_SQL(qryOffice) 
     Case Is = "School Details" 
      SQLdata = get_SQL(qrySchools) 
     Case Is = "ICT Staff" 
      SQLdata = get_SQL(qryITstaff) 
     Case Else 
      ToolStrip1.Visible = True 
    End Select 
    dgvEditor.DataSource = SQLdata 
End Sub 

SQLDATA是一個全局變量「公共SQLDATA作爲數據表」

所以我想創建一個新的函數,將任何更改保存到SQL數據庫。因爲我正在使用相同的全局變量來填充單個窗體並且可以同時存在多個實例,所以我需要弄清楚如何從DataGridView或其他方面傳遞信息,以及我被卡住了。

任何幫助,非常感謝。

回答

0

我終於找到了一個解決方案,並認爲我會發布任何其他人遇到同一問題。

我最終決定採用只有使用這樣的代碼有一個編輯窗口中打開在一個時間:

Public sqlEditForm As SQLeditor 
If issql = True Then 
      If sqlEditForm Is Nothing OrElse sqlEditForm.IsDisposed Then 
       sqlEditForm = New SQLeditor 
       sqlEditForm.MdiParent = Main 
       sqlEditForm.Show() 
      Else 
       Dim reply As DialogResult 
       reply = MsgBox("An existing edit window is already active, do you want to close the existing instance and create a new one?" & vbCrLf & "Any unsaved changes will be lost?", MsgBoxStyle.YesNoCancel, "Existing Window Detected") 
       Select Case reply 
        Case Is = vbYes 
         sqlEditForm.Close() 
         sqlEditForm = New SQLeditor 
         sqlEditForm.MdiParent = Main 
         sqlEditForm.Show() 
        Case Is = vbNo 
         sqlEditForm.Show() 
        Case Is = vbCancel 

       End Select 
      End If 

然後就是保存從數據適配器的數據的一個實例。

Public Sub save_SQL() 
    Try 
     Dim myAdapter As New MySqlDataAdapter 
     Dim MysqlConn As New MySqlConnection 
     Dim cmdb = New MySqlCommandBuilder(myAdapter) 

     MysqlConn.ConnectionString = "server=" & sqlServer & ";" _ 
      & "user id=" & sqlUsername & ";" _ 
      & "password=" & sqlPassword & ";" _ 
      & "database=" & sqlDatabase 

     MysqlConn.Open() 

     Select Case sqlclick 
      Case Is = "Office Details" 
       myAdapter.SelectCommand = New MySqlCommand(qryOffice, MysqlConn) 
      Case Is = "School Details" 
       myAdapter.SelectCommand = New MySqlCommand(qrySchools, MysqlConn) 
      Case Is = "ICT Staff" 
       myAdapter.SelectCommand = New MySqlCommand(qryITstaff, MysqlConn) 
      Case Is = "SQL Editor" 
       myAdapter.SelectCommand = New MySqlCommand(qrycustom, MysqlConn) 
      Case Else 
     End Select 
     myAdapter.Update(SQLdata) 

     MysqlConn.Close() 
     MysqlConn.Dispose() 
    Catch ex As Exception 
     Main.lblStatus.Text = "SQL Connection Error" 
     errMsg = ex.ToString 
     errForm = "SQL Connection" 
     errWrite() 
    End Try 
End Sub 

它應該不會很難適應相同的系統到多MDI模型,但我不認爲我需要它。