需要一些关于将数据放入 vb.Net 中的 DataGridView 的建议
Posted
技术标签:
【中文标题】需要一些关于将数据放入 vb.Net 中的 DataGridView 的建议【英文标题】:Need some advice on putting data into DataGridView in vb.Net 【发布时间】:2011-08-19 03:30:09 【问题描述】:我需要一些关于在 Visual Basic .Net 中操作 DataGridView 的建议。这是我第一次玩 DataGridView。我的程序是加载一个 .txt 文件,其中包含建筑物中每个房间的数据,并将它们显示在 DataGridView 中。
这是显示 2 个房间的文件的一部分:
1;1812;1812;F18;T1;26808.16;.00;.00;.00;.00;.00;.00;
1;1813;1813;F18;T1;24000.00;3500.00;.00;300.00;.00;.00;.00
房间是一个以结束符结尾的单行字符串。
我在加载文件和获取所有这些信息方面没有问题。我将每个房间的数据存储到 Room 类的对象中,并将它们放在一个列表中。
现在,我将房间的所有属性放入数据网格的列中,如下所示:
现在,如何将所有这些房间的数据放入网格中?我起初尝试关注http://www.dotnetperls.com/datagridview-vbnet,但是将 DataSource 设置为从给定链接模仿的 Room 类列表不会在网格视图中显示任何内容。我们如何告诉程序将网格的行链接到对象列表?还是我做错了?
因此,任何建议都值得赞赏。我们如何做到这一点?
【问题讨论】:
【参考方案1】:您的问题是您使用设计器创建列,然后没有将DataSource
属性链接到这些列。
您发布的链接是关于根据作为对象列表的 DataSource 自动生成列,在该链接中,它们不会在设计器中创建列,而是依赖于 AutoGenerateColumns
属性设置为 true对于DataGridView
。
有一个论坛帖子here 讨论了您需要做什么。在MSDN上也有很好的描述。
基本上,您需要为每一列设置DataPropertyName
以匹配您的对象所需的属性。
所以如果你的对象看起来像:
class Room
public string RoomName() get; set;
您需要在网格设计器中将房间名称列的DataPropertyName
属性设置为RoomName
。
【讨论】:
【参考方案2】:我想您会惊喜地发现使用 BindingSources 和 Visual Studio 可以轻松做到这一点。
-
创建你的房间类(我想已经完成了)
构建您的项目
将您的类设置为 DGV 的数据源:
单击 DGV 的智能标记(或 DGV 属性表中的 DataSource 字段)并在“选择数据源”下拉菜单中选择“添加项目数据源...” 在“数据源配置向导”中选择对象并单击下一步 导航程序集的类结构以选择您在步骤 1 中创建的类,然后单击下一步 单击完成关闭向导您会注意到一个新的 BindingSource 已添加到您的项目中。您将使用此 BindingSource 将您的房间对象列表绑定到您的 DGV。填写 List
的房间后,您的代码将如下所示:
roomBindingSource.DataSource = roomList
请注意,您将从没有列的 DataGridView 开始。执行上述步骤后,您的 DGV 将根据您要绑定的类中字段的可访问性填充列。此时您可以自定义列的外观,例如包括删除/添加等。
【讨论】:
谢谢,它有效。但唯一的问题是我无法在列表中添加新行。表格中没有添加任何新内容,但我已通过使用 RoomBindingSource.Add( ... ) 和 RoomGridView.DataSource = RoomBindingSource 来加载文件并使用 RoomBindingSource.AddNew() 来添加新房间 @Karl 当您说“列表”时,您是指列表,集合吗?如果是这样,您应该可以执行 yourList.Add(listItem)。 不,这对我不起作用。当我 roomList.add(new Room()) 时,RoomGridView 似乎没有得到新项目。 @Karl 抱歉,我的回复不完整。添加新项目后,您需要重新绑定 BindingSource:RoomBindingSource.DataSource = Nothing
、RoomBindingSource.DataSource = RoomList
【参考方案3】:
公开课表1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Uses Test class from above.
Dim list = New List(Of Test)
list.Add(New Test("Mac", 2200))
list.Add(New Test("PC", 1100))
DataGridView1.DataSource = list
End Sub
Private Sub DataGridView1_SelectionChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles DataGridView1.SelectionChanged
' Get the current cell location.
Dim y As Integer = DataGridView1.CurrentCellAddress.Y
Dim x As Integer = DataGridView1.CurrentCellAddress.X
' Write coordinates to console.
Console.WriteLine(y.ToString + " " + x.ToString)
End Sub
结束类
【讨论】:
以上是关于需要一些关于将数据放入 vb.Net 中的 DataGridView 的建议的主要内容,如果未能解决你的问题,请参考以下文章