需要一些关于将数据放入DataGridView的建议vb.Net
我需要在Visual Basic .NET中操作DataGridView的一些建议。这是我第一次玩DataGridView。我的程序是加载一个.txt文件,其中包含建筑物中每个房间的数据,并将它们显示在DataGridView中。需要一些关于将数据放入DataGridView的建议vb.Net
这里是表示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设置为从指定链接模仿的类房间列表并没有在网格视图中显示任何内容。我们如何告诉程序将网格的行链接到对象列表?还是我做错了?
所以,任何意见表示赞赏。我们如何做到这一点?
我想你会惊喜于BindingSources和Visual Studio这么容易。
- 创建房类(已经做了我相信)
- 生成项目
-
设置你的类作为您DGV的DataSource:
- 单击DGV的智能标签(或数据源场在DGV的属性页中)和“选择数据源”下拉列表中选择“添加项目数据源...”“
- 在‘数据源配置向导’中选择对象,然后单击下一步
- 导航程序集的类结构,以选择在步骤1中创建的类,然后单击下一步
- 单击Finish关闭向导
您会注意到一个新的BindingSource已经添加到您的项目中。您将使用此BindingSource将您的Room对象列表绑定到您的DGV。您的代码将是这个样子,你填写你的房间
List
后:roomBindingSource.DataSource = roomList
请注意,您有没有列一个DataGridView开始。在按照上面的步骤操作之后,您的DGV将根据您绑定到的类中字段的可访问性填充列。在这一点上,你可以自定义列的外观,如包括删除/添加等
您的问题是,您正在使用设计器来创建您的列,然后不将DataSource
属性链接到这些列。
您发布的链接正在讨论基于DataSource自动生成列,该DataSource是对象列表,在该链接中它们不会在设计器中创建列,而是依赖于将AutoGenerateColumns
属性设置为true for DataGridView
。
有一个论坛帖子here它谈论你需要做什么。在MSDN上也有很好的描述。
基本上,您需要为每列设置DataPropertyName
以匹配您的对象所需的属性。
所以,如果你的对象是这样的:
class Room
{
public string RoomName() {get; set;}
}
您需要的DataPropertyName
属性设置为RoomName
在网格设计的房间名称列。
公共类Form1中
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
末级
谢谢,它的工作原理。但唯一的问题是我无法将新行添加到列表中。没有新的东西添加到表中,但我通过使用RoomBindingSource.Add(...)和RoomGridView.DataSource = RoomBindingSource来加载文件和RoomBindingSource.AddNew()来增加一个新房间来解决此问题 – Karl 2011-05-12 09:27:04
@Karl当你说'列表'你是指列表,集合?如果是这样,你应该可以做yourList.Add(listItem)。 – 2011-05-12 23:25:39
不,不适合我。当我roomList.add(新的房间()),RoomGridView似乎并没有得到新的项目。 – Karl 2011-05-13 08:38:35