我看过并找到了一个类似的问题,虽然没有解决我的问题 - 其他问题是datagridview-is-blank-after-changing-datasource-at-runtime
我确信这是一个简单的问题,答案更简单。在我的第一个Windows窗体应用程序上工作并找到一些与ASP.Net有很多不同的东西:)
所以在这个应用程序中我有以下内容:
在这个表单的代码视图中,我试图将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)
...
答案 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