очевидная ошибка при повторном заполнении таблицы данных - PullRequest
0 голосов
/ 27 июля 2011

У меня есть простой пример, иллюстрирующий то, что я нашел.У меня также есть «исправление», но я не думаю, что оно мне нужно!

Я использую VS2010 и .NET 4. В моей форме есть DataGridView (dgvTest) и флажок (CheckBox1).Я выбираю 2 или 3 поля из таблицы, в зависимости от того, установлен ли флажок (который изначально).

Мои возможные операторы SQL: "SELECT ID,strForenames,strSurname FROM tblAlumni" и "SELECT strForenames,strSurname FROM tblAlumni".

Я использовал SQL Profiler для подтверждения того, что это запросы, отправленные в БД.

Все выглядит хорошо, когда я загружаю форму (я вижу 3 поля в том порядке, в котором я ожидаю) и когда снимаю флажок (я вижу 2 поля в том порядке, в котором я ожидаю).

Однако, когда я проверяю его снова, поле ID появляется в столбцах ТРЕТЬЕГО, а не в столбцах идентификатора.

Я нашел пару сообщений о чем-то похожем на это (неправильное) поведение в сети, но люди, похоже, просто находят какой-то другой способ выполнить работу, а не спрашивают, является ли это проблемой с DataGridView, которая требуетфиксированный.

Поскольку я смог воссоздать его на простом примере, у меня есть некоторая уверенность (только некоторые!), Что я не упускаю ничего очевидного.

Imports System.Data.SqlClient
Imports System.Windows.Forms
Imports System

Public Class Form1
    Inherits System.Windows.Forms.Form

Dim sqlConn As SqlConnection

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    loadGRID()
End Sub

Private Sub loadGRID()
    Dim sqlConn As SqlConnection = New SqlConnection("Data Source=.\sqlexpress;Initial Catalog=aspnetdb;Integrated Security=True")
    sqlConn.Open()
    Dim dataAdapter As SqlDataAdapter = New SqlDataAdapter("SELECT " & IIf(CheckBox1.Checked, "ID,", "") & "strForenames,strSurname FROM tblAlumni", sqlConn)
    Dim ds As DataSet = New DataSet()
    dataAdapter.Fill(ds)
    dgvTest.DataSource = ds.Tables(0)
    sqlConn.Close()
End Sub

Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    loadGRID()
End Sub
End Class

Итак, мой вопрос:Ваши эксперты согласны, что это ошибка?«Исправить» - стереть DataGridView между повторными заселениями, но я не уверен, что должен это делать?

    dgvTest.DataSource = Nothing
    dgvTest.Refresh()

Ответы [ 2 ]

0 голосов
/ 19 мая 2014

Однако, когда я проверяю его снова, поле идентификатора появляется ТРЕТЬЕ в столбцах DataGridView, а не сначала!

Это ожидаемое поведение, поскольку столбцы strForenames и strSurname уже существуют.

Попробуйте dgvTest.Columns.Clear () до и dgvTest.refresh после изменения источника данных

0 голосов
/ 04 августа 2011

Я обнаружил, что BindingSource является связующим звеном между «источником данных» и сетью данных, и работает для меня очень хорошо, извините, я знаю, что это не отвечает, является ли это ошибкой, поскольку я не уверен.

(c #)

BindingSource bindingSource = new BindingSource();

bindingSource.DataSource = ds.Tables(0);
bindingSource.ResetBindings(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...