私は、私が見つけたものを説明する簡単な例を作成しました。私はまた、 "修正"がありますが、私はそれが必要であるとは思わない!datagridviewを再作成するときの見かけのバグ
私はVS2010と.NET 4を使用しています。私のフォームにはDataGridView(dgvTest)とチェックボックス(CheckBox1)があります。私は、チェックボックスがチェックされているかどうか(最初はどちらであるか)によって、テーブルから2つまたは3つのフィールドを選択しています。
可能なSQL文は、"SELECT ID,strForenames,strSurname FROM tblAlumni"
と"SELECT strForenames,strSurname FROM tblAlumni"
です。
SQLプロファイラを使用して、これらがDBに送信されたクエリであることを確認しました。
フォームを読み込んだとき(私は3つのフィールドが予想通りの順番で表示されます)、ボックスのチェックを外すと2つのフィールドが表示されます。
しかし、もう一度チェックすると、IDフィールドは、DataGridViewの列に3番目に表示されます。
ネット上でこの(誤った)振る舞いに類似したレポートがいくつか見つかりましたが、修正する必要がある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()