2012-02-26 14 views
0

http://www.vbmysql.com/articles/vbnet-mysql-tutorials/the-vbnet-mysql-tutorial-part-4MySQL Queryはデータベースを更新していますが、DataGridViewコントロールは更新していませんか?私は勉強して自分自身に、このサイトからVB.netコーディングとMySQLを教えしようとしてきた

これまでのところ、私はしかし、私は、すべての概念を把握し、コードに沿って、次のことに成功してきました私のボタンの1つで呼び出しているクエリに問題が発生しました。私はエラーが発生していないと思います - そして、それはデータベースが適切に更新されているようです(これはデータベースにログインしてエントリを見ることができるためです)。

問題は、私は、DataGridViewコントロールの.Refreshメソッドを呼び出すと、データベースからコンテンツが中に引っ張られていないことである。

これは、クエリとの誤差であるか、それが何か他のものでしょうか?

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

はここ形式(frmMain)の全体のコードです。後:

dgvStatus.DataSource = myData 

dgvStatus.ResetBindings() 
+0

お返事ありがとうございます。残念ながら、コントロールに.DataBind()プロパティがないようです。近くに来る唯一のプロパティは.DataBindings()ですが、それはエラーをスローします。 –

+0

私はお詫び申し上げます。私はDataGridViewではなく、GridViewを考えていました。代わりに 'ResetBindings'を試してください。更新された答え。 – pete

+0

ご協力いただきありがとうございますが、私は問題を理解したと思います。 frmMainをインスタンス化している間、私はログインフォームからUserIDパラメータを渡した行を追加しませんでした。私はこれが欠けていた:mainForm.UserID = UserID –

0

を入れて私が自分自身の問題を解決しました表示されます。私のメインフォーム(frmMain)をインスタンス化している間、UserIDパラメータをログインフォーム(frmLogin)からメインフォームに渡すことを意図した1行のコードを無視しました。再び

mainForm.UserID = UserID 

ありがとう:

は、私は次の行を挿入します。

関連する問題