2012-10-27 63 views
0

可能重複:
Issue with displaying SQL result in DataGridView空白的DataGridView問題

我有種問過這個問題,但從來沒有得到它排序。基本上我試圖用SQL查詢的結果填充表單上的datagridview。我沒有從這段代碼中得到任何錯誤,但我只是得到了一個完全空白的datagridview,即它不顯示任何東西,甚至沒有列標題。

另請注意我知道我目前對SQL注入SQL打開,我只想在我排序之前得到這個工作。

這裏是我的整個類代碼:

Imports System.Data.OleDb 
Imports System.Data 

Public class TechScreen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0: Data Source = C:\Users\Dave\Documents\jobList.mdb;") 
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM jobList WHERE techID = " & TechScreenID &"", con) 
con.Open() 
Dim DA As OleDbDataAdapter = New OleDbDataAdapter(cmd) 
Dim mydataset As DataSet = New DataSet 
DA.Fill(mydataset, "MyTable") 
DataGridView1.DatSource = mydataset.Tables("MyTable").DefaultView 
con.Close() 
con = Nothing 

End sub 
End class 

回答

0

首先,雖然它可能是也可能不是你的問題的根源,行:

DataGridView1.DatSource = mydataset.Tables("MyTable").DefaultView 

包含一個錯字。應該是DataGridView1.DataSource。看起來像這樣會導致編譯器錯誤。

除此之外,請嘗試簡化類似於下面的內容,如果仍然存在綁定問題,請在調試器中單步執行,以確保所有內容都按預期工作。此外,請檢查您的dgv控件上的「自動生成列」屬性是否設置爲true。

我不清楚你正在嘗試做什麼,所以下面是我將如何處理這個問題的一個非常一般的例子。

  • 首先,將你的連接字符串的項目設置文件, 和使用My.Settings.MyConnectionStringName引用它。
  • 其次,在SQL中使用參數,而不是串聯連接。
  • 將您的數據訪問內容封裝在「使用」塊中。使用將處理 塊內物體的處理範圍爲你,一般是 一個更清潔的方式去。
  • 只是我的個人喜好,但我不喜歡所有的數據集附帶簡單的數據表將做的bs開銷 。
  • 這裏我沒有儘可能完整地做到這一點,但我建議 將數據檢索與指派分離到UI控件。即使 更多,我可能會去下一步,並從Form Load事件中分離控制 分配。您可能會發現 表單中有多個地方需要刷新或重置數據源 。

有很多種方法可以解決這個,而我並不一定是「流行的方式。然而,對於我下面的工作只是現在

簡化代碼,並聘請一些重構:。

Imports System.Data 
Imports System.Data.OleDb 

Public Class TechScreen 

    Private Sub TechScreen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 

     'Not sure where your TechScreenID input parameter is coming from, so this is just for example: 
     Dim TechID As Integer = 1 

     ' Use a function to return the data to be used as the DataSource for the dgv control: 
     DataGridView1.DataSource = Me.JobListTable(TechID) 

    End Sub 


    Private Function JobListTable(TechID As Integer) As DataTable 
     Dim dt As DataTable = Nothing 

     Dim SQL As String = "SELECT * FROM joblist WHERE techID = @TechID" 

     ' The Using block handles disposal of objects initialized: 
     Using con As OleDbConnection = New OleDbConnection(My.Settings.MyConnection) 
      Using cmd As OleDbCommand = New OleDbCommand(SQL, con) 

       ' Use parameters instead of inline concatenation for cleaner code, 
       ' and protection against sql injection attacks: 
       cmd.Parameters.AddWithValue("@TechID", TechID) 
       con.Open() 

       dt = New DataTable() 

       Try 
        dt.Load(cmd.ExecuteReader()) 
       Catch 
        MsgBox("There was an error retrieving data") 
       Finally 
        con.Close() 
       End Try 
      End Using 
     End Using 

     Return dt 

    End Function 

End Class 
+0

排序它,這是我如何在SQL字符串中聲明我的TechID的問題。 – user1352057