2012-11-01 38 views
2

我也看了一下,發現一個問題,這是類似的後空白,雖然沒有解決我的問題 - 其他問題是datagridview-is-blank-after-changing-datasource-at-runtime的DataGridView是設置數據源

我相信這是一個更簡單的回答一個簡單的問題我的第一個Windows窗體..Working應用和發現了一些東西從ASP.Net :)

不同了很多,所以在這個應用程序,我有以下幾點:

  • 主要形式
  • 工具欄此形式,打開了一個第二形式來設置應用程序設置
  • 該第二形式具有與各種文本框/複選框/ combolists /按鈕
    • 所有這些工作完美製表控制(2個標籤)。
  • 在第二個窗體的第二個選項卡上,還有更多的文本框等,我添加了一個DataGridView;所謂printerListGrid

在這種形式下,我想一個List(打印機)綁定到它的代碼視圖

printerListGrid.DataSource = AppContext.printers.printerList 

當我運行我的應用程序,並轉到形式/選項卡的DataGridView是空白的。

我也曾嘗試:

printerListGrid.Columns.Clear() 
    printerListGrid.AutoGenerateColumns = True 
    printerListGrid.DataSource = AppContext.printers.printerList 

再次 - 它是空白。

在調試時,我可以看到我的printerList包含了2個printer對象。我還可以通過查看.DataSource屬性的內容來看到這些設置已被設置爲printerListGrid。但是,DataGridView仍然是空白的。

我猜測必須有一些方法來重新呈現網格?

爲了代碼discolure;這是在List(Of Printer)

Public Structure Printer 
     Public id As Integer 
     Public name As String 
     Public material As Enums.Materials 
     Public outputFolder As String 
    End Structure 

讓我知道如果有任何更多的代碼/說明您需要提供幫助。

UPDATE:

我忘了提。我想設置DataSourcePrivate Sub這就是所謂的形式Load事件MyBase.Load

更新#2

我繼續玩這個,試圖得到它的工作 - 我可能是完全誤解控件及其目的..無論如何,我也嘗試了以下內容:

printerListGrid.AutoGenerateColumns = False 

    Dim col As DataGridViewColumn = New DataGridViewTextBoxColumn() 
    col.DataPropertyName = "name" 
    col.HeaderText = "Name" 
    printerListGrid.Columns.Add(col) 

    col = New DataGridViewTextBoxColumn() 
    col.DataPropertyName = "material" 
    col.HeaderText = "Material" 
    printerListGrid.Columns.Add(col) 

    col = New DataGridViewTextBoxColumn() 
    col.DataPropertyName = "outputFolder" 
    col.HeaderText = "Output Folder" 
    printerListGrid.Columns.Add(col) 

    printerListGrid.DataSource = AppContext.printers.printerList 

這會導致至少網格顯示行;看起來像2。然而,他們沒有從List(Of Printer)的數據填充...

+0

我通常做這個用的BindingSource,但由於某種原因它今天不會工作。基本上你把這個列表設置爲bindingsource中的數據源。然後,將Datagridview數據源設置爲綁定源。這樣你可以運行Bindingsource.Resetbindings(true)來更新你的datagridview。但我不能創建一個工作的例子:/ – WozzeC

+0

很諷刺呃:)是的,我也試過了。我也試圖將相同的列表綁定到組合框。它綁定,但DataMember和ValueMember不會設置。該列表只顯示了2個項目閱讀AutoArtwork.Logic.Printer - 我試着設置這些到各種。這真的讓我感到惱怒:) – Darren

+0

由於我總是使用屬性而引發了這個事實。我不是全球變數的忠實粉絲,今天我的大腦相信公共和財產都是同樣的東西。 – WozzeC

回答

4

發現我做錯了什麼。基本上,試試這個:

Public Structure Printer 
    Property id As Integer 
    Property name As String 
    Property material As Enums.Materials 
    Property outputFolder As String 
End Structure 
+0

如果您在編輯之前發現它,我只想說您可以跳過之前出現過的「共享」。 – WozzeC

+0

試過了,沒有爲我工作。如果還有其他幫助。List(Of Printer)正在使用來自XML的數據在Printers類的構造函數中進行填充。所有這些都是填充的,我可以在調試器中看到它 - 只是無法使綁定和顯示正確。 – Darren

+0

啊,是的,我做到了。讓我試試這個.. – Darren

2

正在勢必需要的字段是性能,而不是公共變量。例如,如果你用下面的代碼替換你的結構,你會在網格中看到id。你必須爲你的其他變量做相同的屬性開關,讓它們顯示出來。

Public Structure Printer 
     Private _id As Integer 
     Public Property id() As Integer 
      Get 
       Return _id 
      End Get 
      Set(ByVal value As Integer) 
       _id = value 
      End Set 
     End Property 

     Public name As String 
     Public material As Materials 
     Public outputFolder As String 

    End Structure 
+0

Upvote,感謝您的額外信息:) – Darren