我查看并发现了一个类似的问题,但没有解决我的问题 - 另一个问题是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
让我知道您是否需要提供帮助的更多代码/描述。
更新:
我忘了提。我正在尝试设置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)
...的数据