2

我查看并发现了一个类似的问题,但没有解决我的问题 - 另一个问题是datagridview-is-blank-after-change-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

再次 - 它是空白的。

在调试时,我可以看到我的打印机列表包含 2 个printer对象。通过查看属性的内容,我还可以看到这些已设置为 printerListGrid .DataSource。然而,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

让我知道您是否需要提供帮助的更多代码/描述。

更新:

我忘了提。我正在尝试设置DataSourcePrivate 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)...的数据

4

2 回答 2

4

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

Public Structure Printer
    Property id As Integer
    Property name As String
    Property material As Enums.Materials
    Property outputFolder As String
End Structure
于 2012-11-01T15:20:19.813 回答
2

The fields that are being bound need to be properties, not public variables. For example, if you replace your structure with the following you will see the id's in the grid. You'd have to do the same property switch for your other variables as well to have them show up.

 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
于 2012-11-01T15:32:19.077 回答