2013-08-01 4 views
0

У меня есть один Datagridview в одной из моих форм Windows, которые я намерен выбрать, чтобы пользователь выберет запрос из выпадающего меню со списком, нажмите кнопку, затем результаты запроса будут отображаться на datagridview.удалять избыточные столбцы в выбираемом запросе datagridview

Все работает нормально, однако при выборе и отправке другого запроса в datagridview отображаются дополнительные пустые столбцы, используемые ранее выбранным запросом.

Что было бы лучшим способом остановить это? это основано на самом datagridview? или my subroutine для подключения к базе данных и выполнить запрос

Я попытался очистить данные (используемые в подпрограмме запроса) и столбцы datagridview, но это не решило проблему.

Мои различные попытки очистки DataGridView с кнопкой (пробовал в различных комбинациях):

Private Sub btnclearquery_Click(sender As System.Object, e As System.EventArgs) Handles btnclearquery.Click 
    mysql.qrydata.Clear() 
    DataGridViewqry.DataSource = Nothing 
    DataGridViewqry.Columns.Clear() 
    DataGridViewqry.Rows.Clear() 
End Sub 

Моя подпрограмма для выполнения запросов (ссылка в другом файле кода SQLQuery строка заполняется с помощью выбора случая, когда. пользователь выбирает запрос из комбинированного поля):

Public qrysqlconn As MySqlConnection 
Public qrycommand As New MySqlCommand 
Public qryadapter As New MySqlDataAdapter 
Public qrydata As New DataTable 
Public qrysql As String 

Public Sub doquery(ByVal sqlquery As String) 
    qrysqlconn = New MySqlConnection 
    qrysqlconn.ConnectionString = "server=localhost;" _ 
     & "user id=root;" _ 
     & "password=W1nd0ws;" _ 
     & "database=hystest" 
    qrysql = sqlquery 
    Try 
     qrysqlconn.Open() 
     qrydata.Clear() 
     qrycommand.Connection = qrysqlconn 
     qrycommand.CommandText = qrysql 
     qryadapter.SelectCommand = qrycommand 
     qryadapter.Fill(qrydata) 

     queries.DataGridViewqry.DataSource = qrydata 
     queries.DataGridViewqry.FirstDisplayedScrollingRowIndex = queries.DataGridViewqry.RowCount - 1 
    Catch myerror As MySqlException 
     MessageBox.Show("Database error: " & myerror.Message) 
    Finally 
     qrysqlconn.Close() 
     qrysqlconn.Dispose() 
    End Try 
End Sub 

ответ

0

У меня была такая проблема и раньше.
вам, возможно, потребуется создать новый экземпляр DataView для каждого нового взгляда, который вы хотите отобразить, чтобы обойти эту проблему:

Dim dataview As DataView = _ds.YourStuff.DefaultView 
dataview.Stuff 
0

мне удалось решить эту проблему или, по крайней мере, создать работы вокруг этой проблемы, путем создания отдельной подпрограммы/соединения/данных для каждого запроса. поэтому вместо того, чтобы:

doquery(sql command) 

Я использовал:

query1(<parameters>) 
query2(<parameters>) 
... 
etc 

Это, кажется, работает хорошо на данный момент. это будет означать, что проблема была основана на повторном использовании одного и того же типа данных снова и снова.