2011-07-27 3 views
0

私は、私が見つけたものを説明する簡単な例を作成しました。私はまた、 "修正"がありますが、私はそれが必要であるとは思わない!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() 

答えて

0

私はわからないとして、これはバグであるかどうかを答えていないことを知って、申し訳ありません私は、「データソース」の間の接着剤としてのBindingSourceを発見したとのDataGridViewは私のために非常にうまく動作します。

(C#の)

BindingSource bindingSource = new BindingSource(); 

bindingSource.DataSource = ds.Tables(0); 
bindingSource.ResetBindings(false); 
0

私は再びそれをチェックするときただし、IDフィールドはありません最初、DataGridViewの列にTHIRD登場!

strForenamesとstrSurnameがすでに存在することが予想される動作です。

は、データソース

を変更した後dgvTest.refresh前と dgvTest.Columns.Clear()をお試しください
関連する問題