2012-02-26 62 views
0

我一直在努力學習和自學從本網站VB.net編碼和MySQL:http://www.vbmysql.com/articles/vbnet-mysql-tutorials/the-vbnet-mysql-tutorial-part-4MySQL查詢正在更新數據庫但不是DataGridView控件?

到目前爲止,我已經成功地掌握所有的概念,並沿着下面的代碼,但是,我遇到一個問題,我正在調用我的一個按鈕。我沒有收到錯誤 - 就像我期望的那樣 - 並且看起來查詢正在更新數據庫(這是因爲我可以登錄數據庫並查看條目)。

的問題是,當我呼籲DataGridView控件的方法.REFRESH,從數據庫中的內容沒有被拉入。

這是與查詢錯誤或者是別的東西?

這裏的形式(frmMain)的全部代碼:

Imports MySql.Data.MySqlClient 
Imports System.Data 


Public Class frmMain 

Private myConnString As String 
Private myUserID As Integer 

Public WriteOnly Property connectionString() As String 
    Set(ByVal value As String) 
     myConnString = value 
    End Set 
End Property 

Public WriteOnly Property UserID() As Integer 
    Set(ByVal value As Integer) 
     myUserID = value 
    End Set 
End Property 


Private Sub cmdRefresh_Click(sender As System.Object, e As System.EventArgs) Handles cmdRefresh.Click 

    Dim conn As New MySqlConnection 
    Dim myCommand As New MySqlCommand 
    Dim myAdapter As New MySqlDataAdapter 
    Dim myData As New DataTable 
    Dim SQL As String 

    SQL = "SELECT CONCAT(u.lastname, ', ', u.firstname) AS Name, s.message AS Message, " _ 
     & "DATE_FORMAT(e.timestamp, '%b %d %Y - %r') AS 'Date & Time', e.status AS Status " _ 
     & "FROM event e LEFT JOIN status s ON e.message_id = s.message_id, user u " _ 
     & "WHERE(e.user_id = u.user_id) " _ 
     & "AND event_id IN(" _ 
     & "SELECT MAX(e.event_id) " _ 
     & "FROM event e " _ 
     & "GROUP BY e.user_id) " _ 
     & "ORDER BY Name" 

    conn.ConnectionString = myConnString 

    Try 
     conn.Open() 
     Try 
      myCommand.Connection = conn 
      myCommand.CommandText = SQL 
      myAdapter.SelectCommand = myCommand 
      myAdapter.Fill(myData) 
      dgvStatus.DataSource = myData 
      dgvStatus.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 
      dgvStatus.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 
     Catch myerror As MySqlException 
      MessageBox.Show("There was an error reading from the database: " & vbCrLf & myerror.Message) 
     End Try 
    Catch myerror As MySqlException 
     MessageBox.Show("Error Connecting to Database: " & vbCrLf & myerror.Message) 
    Finally 
     If conn.State <> ConnectionState.Closed Then 
      conn.Close() 
     End If 
    End Try 

End Sub 

Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

    cboStatus.Items.Add("In") 
    cboStatus.Items.Add("Out") 
    cboStatus.SelectedIndex = 0 

    dgvStatus.ReadOnly = True 

    Dim conn As New MySqlConnection 
    Dim myCommand As New MySqlCommand 
    Dim myAdapter As New MySqlDataAdapter 
    Dim myData As New DataTable 
    Dim SQL As String 

    SQL = "SELECT s.message_id, s.message " _ 
     & "FROM tutorial.status s " _ 
     & "WHERE user_id IS NULL and deleted = 'False'" 

    conn.ConnectionString = myConnString 

    Try 
     conn.Open() 
     Try 
      myCommand.Connection = conn 
      myCommand.CommandText = SQL 
      myAdapter.SelectCommand = myCommand 
      myAdapter.Fill(myData) 
      cboMessage.DataSource = myData 
      cboMessage.DisplayMember = "message" 
      cboMessage.ValueMember = "message_id" 
     Catch myerror As MySqlException 
      MessageBox.Show("There was an error reading from the database: " & vbCrLf & myerror.Message) 
     End Try 
    Catch myerror As MySqlException 
     MessageBox.Show("Error Connecting to Database: " & vbCrLf & myerror.Message) 
    Finally 
     If conn.State <> ConnectionState.Closed Then 
      conn.Close() 
     End If 
    End Try 


End Sub 

Private Sub cmdUpdate_Click(sender As System.Object, e As System.EventArgs) Handles cmdUpdate.Click 
    Dim conn As New MySqlConnection 
    Dim myCommand As New MySqlCommand 

    conn.ConnectionString = myConnString 

    myCommand.Connection = conn 
    myCommand.CommandText = "INSERT INTO event(user_id, message_id, timestamp, status, creator)" _ 
     & "VALUES(?UserID, ?MessageID, NOW(), ?Status, ?Creator);" 
    myCommand.Parameters.AddWithValue("?UserID", myUserID) 
    myCommand.Parameters.AddWithValue("?MessageID", cboMessage.SelectedValue) 
    myCommand.Parameters.AddWithValue("?Status", cboStatus.SelectedItem) 
    myCommand.Parameters.AddWithValue("?Creator", myUserID) 

    Try 
     conn.Open() 
     myCommand.ExecuteNonQuery() 
    Catch myerror As MySqlException 
     MessageBox.Show("There was an error updating the database: " & vbCrLf & myerror.Message) 
    Finally 
     If conn.State <> ConnectionState.Closed Then 
      conn.Close() 
     End If 
    End Try 

    cmdRefresh.PerformClick() 

End Sub 

末級

回答

0

您需要重新綁定數據源。後:

dgvStatus.DataSource = myData 

dgvStatus.ResetBindings() 
+0

感謝您的回覆。不幸的是,它看起來沒有控件上的.DataBind()屬性。接近的唯一屬性是.DataBindings(),但會引發錯誤。 – 2012-02-26 18:40:31

+0

我很抱歉。我在想GridView,而不是DataGridView。改爲嘗試'ResetBindings'。更新了答案。 – pete 2012-02-26 19:34:25

+0

感謝您的協助,但我想我找到了問題所在。在實例化frmMain時,我忽略了添加一條從登錄表單傳遞UserID參數的行。我錯過了這個:mainForm.UserID = UserID – 2012-02-26 20:32:11

0

看來我解決我自己的問題。在實例化我的主窗體(frmMain)時,我忽略了一行代碼,用於將用戶ID參數從登錄窗體(frmLogin)傳遞到主窗體。再次

mainForm.UserID = UserID 

感謝:

我插入以下行。