Я изучаю и пытаюсь научить себя VB.net кодирования и MySQL с этого сайта: http://www.vbmysql.com/articles/vbnet-mysql-tutorials/the-vbnet-mysql-tutorial-part-4MySQL Query обновляет базу данных, но не элемент управления DataGridView?
До сих пор я был успешным в захватывая все понятия и следуя по коду, однако, я столкнувшись с проблемой с запросом, я вызываю одну из своих кнопок. Я не получаю сообщение об ошибке - как и ожидалось, - и кажется, что запрос соответствующим образом обновляет базу данных (это потому, что я могу войти в базу данных и увидеть записи).
Проблема заключается в том, что, когда я вызываю метод .refresh на контроле DataGridView, содержание из базы данных не втягиваться.
Является ли это ошибка с запросом или что-то еще?
Вот весь код вида (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
End класса
Спасибо за отзыв. К сожалению, похоже, что в элементе управления отсутствует свойство .DataBind(). Единственное свойство, которое подходит близко, это .DataBindings(), но это вызывает ошибку. –
Прошу прощения. Я думал о GridView, а не о DataGridView. Вместо этого попробуйте 'ResetBindings'. Обновленный ответ. – pete
Спасибо за помощь, но я думаю, что я понял проблему. При создании экземпляра frmMain я забыл добавить строку, которая передала параметр UserID из формы входа. Мне не хватало этого: mainForm.UserID = UserID –