удалить лишние столбцы в выбираемом запросе datagridview

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

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

Что было бы лучшим способом предотвратить это? это основано на самом 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

person almg    schedule 01.08.2013    source источник


Ответы (2)


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

Dim dataview As DataView = _ds.YourStuff.DefaultView
dataview.Stuff
person Adam    schedule 01.08.2013

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

doquery(sql command)

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

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

Кажется, сейчас это работает нормально. это означало бы, что проблема была основана на повторном использовании одной и той же таблицы данных снова и снова.

person almg    schedule 05.08.2013