2012-11-01 111 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