设置Datasource后,DataGridView为空

时间:2012-11-01 14:28:28

标签: .net vb.net winforms datagridview

我看过并找到了一个类似的问题,虽然没有解决我的问题 - 其他问题是datagridview-is-blank-after-changing-datasource-at-runtime

我确信这是一个简单的问题,答案更简单。在我的第一个Windows窗体应用程序上工作并找到一些与ASP.Net有很多不同的东西:)

所以在这个应用程序中我有以下内容:

  • 主要表格
  • 此表单上的工具栏打开第二个表单以设置应用程序设置
  • 此第二个表单有一个选项卡控件(2个选项卡),其中包含各种文本框/复选框/组合符/按钮
    • 所有这些都很完美。
  • 在第二个表单的第二个选项卡上,以及更多文本框等,我添加了一个DataGridView;名为printerListGrid

在这个表单的代码视图中,我试图将List(Of Printer)绑定到它

printerListGrid.DataSource = AppContext.printers.printerList

当我运行我的应用程序并转到表单/选项卡时,DataGridView为空白。

我也尝试过:

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

再次 - 它是空白的。

调试时我可以看到我的printerList包含2个printer个对象。通过查看.DataSource属性的内容,我还可以看到这些已设置为printerListGrid。然而,DataGridView仍然是空白的。

我猜测必须有一些方法来重新渲染网格?

为了代码变色;这就是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

如果您需要提供更多帮助,请与我们联系。

更新

我忘了提。我想在表单加载事件DataSource

上调用的Private Sub中设置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) ...

的数据

2 个答案:

答案 0 :(得分:4)

发现我做错了什么。基本上试试这个:

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

答案 1 :(得分: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