我有一个使用TableAdapter
构建的自定义类列表。
我想将这些仅添加到DataGridView
绑定某些列。
我已经尝试过以下代码来填充和绑定数据:
lAllBookings = (From r As DataRow In BookingsTableAdapter1.GetDataWithItems().Rows
Select New Booking With {.bookingID = r.Item("BookingID"), _
.itemID = r.Item("ItemID"), _
.bookedOutDate = r.Field(Of DateTime?)("BookedOutDate"), _
.bookedInDate = r.Field(Of DateTime?)("BookedInDate"), _
.identType = r.Item("IdentType"), _
.identString = r.Item("IdentString"), _
.image = r.Item("Image"), _
.complete = r.Item("Complete"), _
.notes = r.Item("Notes"), _
.itemName = r.Item("ItemName"), _
.itemBC = r.Item("ItemBarcode")}).ToList
dgvBookings.Columns("BookingID").DataPropertyName = "bookingID"
dgvBookings.Columns("ItemIdent").DataPropertyName = "itemName"
dgvBookings.Columns("BookedOut").DataPropertyName = "bookedOutDate"
dgvBookings.Columns("IdentString").DataPropertyName = "identString"
dgvBookings.DataSource = lAllBookings
现在,当我这样做时,我得到正确的行数,但所有字段都是空白的。
我在SO和一些教程上遇到了一些问题,但它们似乎都与我需要的东西略有不同。
有没有办法可以使用我的项目列表填充DataGridView
?
我宁愿避免使用DataSet
,因为我已经在List<Of Class>
类型上构建了很多其他代码。
编辑 - 这是类Booking
声明:
Public Class Booking
Public bookingID As Integer
Public itemID As Integer
Public itemName As String
Public itemBC As String
Public identType As Short
Public identString As String
Public image As Byte()
Public complete As Boolean
Public notes As String
Public bookedInDate As DateTime?
Public bookedOutDate As DateTime?
End Class
答案 0 :(得分:4)
我知道你真的很晚,但也许它可以帮助别人。
我遇到的问题与你使用vb.net相同。
最后我找到了解决方案:你的类没有暴露属性而是暴露变量。绑定系统查找属性,无法找到它们,因此您可以获得空行。
尝试完成添加{get; set;}
的类(或者使用vb.net时的属性属性),一切都会正常工作。
希望它有所帮助。
答案 1 :(得分:2)
我不确定您是否收到了IAllBookings
您想要的所有信息。在任何情况下,您都没有正确地将其传递给dgvBookings
。在这里,您有几个小代码可以帮助您了解其工作原理:
dgvBookings.Columns.Clear()
Dim newTable As New DataTable
newTable.Columns.Add("Column1")
newTable.Columns.Add("Column2")
newTable.Columns.Add("Column3")
newTable.Rows.Add("1", "2", "3")
newTable.Rows.Add("1", "2", "3")
newTable.Rows.Add("1", "2", "3")
dgvBookings.DataSource = newTable
newTable
完全模仿DataGridView
结构(列和行),因此可以直接以DataSource
形式提供。
不太可能是一个简单的List:
dgvBookings.Columns.Clear()
Dim newList = New List(Of String)
newList.Add("1")
newList.Add("2")
newList.Add("3")
dgvBookings.DataSource = newList
您提供的信息少于预期(1D与预期的2D),因此结果不是您想要的。您需要提供更多信息;例如:您可以逐个添加行,而不是依赖于DataSource:
dgvBookings.Columns.Add("Column1", "Column1")
For Each item In newList
dgvBookings.Rows.Add(item)
Next
我希望这个答案可以帮助您更好地了解如何处理DataGridView
以及不同的数据源。
- 更新
逐行选项应用于您的特定情况。
For Each item As Booking In lAllBookings
With item
dgvBookings.Rows.Add(.bookingID.ToString(), .itemID.ToString(), .bookedOutDate.ToString(), .identString.ToString())
End With
Next