: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
エンドクラスあなたがデータソースを再バインドする必要があり
お返事ありがとうございます。残念ながら、コントロールに.DataBind()プロパティがないようです。近くに来る唯一のプロパティは.DataBindings()ですが、それはエラーをスローします。 –
私はお詫び申し上げます。私はDataGridViewではなく、GridViewを考えていました。代わりに 'ResetBindings'を試してください。更新された答え。 – pete
ご協力いただきありがとうございますが、私は問題を理解したと思います。 frmMainをインスタンス化している間、私はログインフォームからUserIDパラメータを渡した行を追加しませんでした。私はこれが欠けていた:mainForm.UserID = UserID –