Я делаю приложение в коде vb.net, используя визуальную базовую среду 2010, и у меня есть небольшая проблема с datagridview. Для получения дополнительной информации я подключил базу данных postgresql, используя разъем odbc, и он работает нормально. Я могу легко вставлять, обновлять, удалять данные, но после обновления и только после запроса на обновление datagridview отображает все мои данные, но обновленная строка автоматически перемещается в последнюю позицию. Зачем ? если я посмотрю свою базу данных в PGadmin 3, у меня нет этой проблемы, это покажет мне отсортированные по возрастанию строки. Лично я искал решения, но я нашел что-нибудь. Я объясню свою ситуацию с скриншотом:Datagridview: строка перемещается после обновления, почему?
Вот мое заявление, когда форма нагрузка: первого изображения => https://drive.google.com/file/d/0B_Lx61Af8AuUNUs4TDlWMnBIblE/view?usp=sharing
Как вы можете видеть строки сортируются по возрастанию. Вот код «ACCUEIL» форме:
Imports System.Data.Odbc
Public Class accueil
Dim database As String = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432;Database=formation;Uid=postgres;Pwd=test;"
Dim CON As OdbcConnection
Dim CMD As OdbcCommand
Dim RD As OdbcDataReader
Dim stock_id As Integer
''''Fonction pour l'affichage pour SessionFormation
Function SessionFormationReadData() As Boolean
Try
CON = New OdbcConnection(database)
CON.Open()
Catch ex As Exception
MessageBox.Show(ex.Message)
CON.Close()
End
Exit Function
End Try
CMD = CON.CreateCommand()
CMD.CommandText = "SELECT * FROM sessionformation;"
RD = CMD.ExecuteReader()
DataGridView1.Columns.Clear()
DataGridView1.Rows.Clear()
If (RD.Read()) Then
DataGridView1.ColumnCount = 4
DataGridView1.Columns(0).Name = "N° de Session"
'DataGridView1.Columns(0).ValueType = GetType(Integer)
DataGridView1.Columns(1).Name = "Test"
'DataGridView1.Columns(1).ValueType = GetType(String)
DataGridView1.Columns(2).Name = "Date de début"
'DataGridView1.Columns(2).ValueType = GetType(DateTime)
DataGridView1.Columns(3).Name = "Date de fin"
'DataGridView1.Columns(3).ValueType = GetType(DateTime)
DataGridView1.Rows.Add(RD("id_session"), RD("type"), RD("date_debut"), RD("date_fin"))
While (RD.Read())
DataGridView1.Rows.Add(RD("id_session"), RD("type"), RD("date_debut"), RD("date_fin"))
End While
'DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
RD.Close()
CON.Close()
Return True
Else
RD.Close()
CON.Close()
Return False
End If
End Function
''''Fonction pour supprimer une session
Public Sub SessionFormationDeleteData()
stock_id = DataGridView1.CurrentRow.Cells(0).Value
Try
CON = New OdbcConnection(database)
CON.Open()
CMD = CON.CreateCommand()
CMD.CommandText = "DELETE FROM SessionFormation WHERE ID_session= '" & stock_id & "';"
CMD.ExecuteNonQuery()
CON.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
CON.Close()
End Try
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call SessionFormationReadData()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ajouter.Show()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
modifier.Show()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Call SessionFormationDeleteData()
Call SessionFormationReadData()
End Sub
End Class
Теперь я хочу сделать обновление до первой строки, поэтому я выбираю его, и я нажмите на кнопку «модификатор». Это изображение сверху здесь =>https://drive.google.com/file/d/0B_Lx61Af8AuUNW45dzFmWHMwcG8/view?usp=sharing
Вот код «модификатор» формы:
Imports System.Data.Odbc
Public Class modifier
Dim database As String = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432;Database=formation;Uid=postgres;Pwd=test;"
Dim CON As OdbcConnection
Dim CMD As OdbcCommand
''''Affiche les données des cellules de la ligne sélection sur HOME dans les champs respectifs
Private Sub modifier_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = accueil.DataGridView1.CurrentRow.Cells(1).Value.ToString()
DateTimePicker1.Text = accueil.DataGridView1.CurrentRow.Cells(2).Value.ToString()
DateTimePicker2.Text = accueil.DataGridView1.CurrentRow.Cells(3).Value.ToString()
End Sub
''''Fonction pour mettre à jour la base de donnée suite à une modification
Public Sub SessionFormationUpdateData()
Dim stock_id As Integer
stock_id = accueil.DataGridView1.CurrentRow.Cells(0).Value
Try
CON = New OdbcConnection(database)
CON.Open()
CMD = CON.CreateCommand()
CMD.CommandText = "update sessionformation set type= '" + TextBox1.Text.ToString() + "', date_debut='" + DateTimePicker1.Value + "', date_fin='" + DateTimePicker2.Value + "' where id_session= '" & stock_id & "';"
CMD.ExecuteNonQuery()
CON.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
CON.Close()
End Try
End Sub
''''Bouton "Ok" pour valider les modifications et rafraichir l'affichage sur "HOME"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call SessionFormationUpdateData()
Close()
Call accueil.SessionFormationReadData()
End Sub
''''Fermeture de la fenêtre
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Close()
End Sub
End Class
На «модификатором», когда я нажимаю на кнопку «ОК», то «модификатор» form close и в форме «accueil» datagridview обновить все данные базы данных. И посмотрите результаты на изображении снизу со второй ссылки. Строка с идентификатором «18» перемещается в последнюю позицию на datagridview. Я не знаю почему.
Пожалуйста, мне нужна помощь. Спасибо, что прочитали мой длинный пост и спасибо помощи. А также извините за мой плохой английский :-).
Возможный дубликат [Почему результаты запроса SQL не возвращаются в ожидаемом порядке?] (Http://stackoverflow.com/questions/10999913/why-do-results-from-a-sql-query -not-come-back-in-the-order-i-expect) – Paolo
Спасибо за ответ, но я не думаю, что это проблема. Потому что это только в приложении vb.net есть эта проблема. Когда я использую pgadmin 3 для просмотра моих таблиц моей базы данных, у меня нет этой проблемы. Все данные находятся в хорошем состоянии. – dimstheonlyone