2011-05-05 78 views
1

我需要在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類的對象中,並將它們放入一個列表中。

現在,我把所有的房間到數據網格的行這樣的特性: edit columns

現在,我怎麼可以把所有這些客房的數據到網格?我首先嚐試了http://www.dotnetperls.com/datagridview-vbnet,但是將DataSource設置爲從指定鏈接模仿的類房間列表並沒有在網格視圖中顯示任何內容。我們如何告訴程序將網格的行鏈接到對象列表?還是我做錯了?

所以,任何意見表示讚賞。我們如何做到這一點?

回答

3

我想你會驚喜於BindingSources和Visual Studio這麼容易。

  1. 創建房類(已經做了我相信)
  2. 生成項目
  3. 設置你的類作爲您DGV的DataSource:

    • 單擊DGV的智能標籤(或數據源場在DGV的屬性頁中)和「選擇數據源」下拉列表中選擇「添加項目數據源...」「
    • 在‘數據源配置嚮導’中選擇對象,然後單擊下一步
    • 導航程序集的類結構,以選擇在步驟1中創建的類,然後單擊下一步
    • 單擊Finish關閉嚮導

    您會注意到一個新的BindingSource已經添加到您的項目中。您將使用此BindingSource將您的Room對象列表綁定到您的DGV。您的代碼將是這個樣子,你填寫你的房間List後:

    roomBindingSource.DataSource = roomList 
    

請注意,您有沒有列一個DataGridView開始。在按照上面的步驟操作之後,您的DGV將根據您綁定到的類中字段的可訪問性填充列。在這一點上,你可以自定義列的外觀,如包括刪除/添加等

+0

謝謝,它的工作原理。但唯一的問題是我無法將新行添加到列表中。沒有新的東西添加到表中,但我通過使用RoomBindingSource.Add(...)和RoomGridView.DataSource = RoomBindingSource來加載文件和RoomBindingSource.AddNew()來增加一個新房間來解決此問題 – Karl 2011-05-12 09:27:04

+0

@Karl當你說'列表'你是指列表,集合?如果是這樣,你應該可以做yourList.Add(listItem)。 – 2011-05-12 23:25:39

+0

不,不適合我。當我roomList.add(新的房間()),RoomGridView似乎並沒有得到新的項目。 – Karl 2011-05-13 08:38:35

1

您的問題是,您正在使用設計器來創建您的列,然後不將DataSource屬性鏈接到這些列。

您發佈的鏈接正在討論基於DataSource自動生成列,該DataSource是對象列表,在該鏈接中它們不會在設計器中創建列,而是依賴於將AutoGenerateColumns屬性設置爲true for DataGridView

有一個論壇帖子here它談論你需要做什麼。在MSDN上也有很好的描述。

基本上,您需要爲每列設置DataPropertyName以匹配您的對象所需的屬性。

所以,如果你的對象是這樣的:

class Room 
{ 
    public string RoomName() {get; set;} 
} 

您需要的DataPropertyName屬性設置爲RoomName在網格設計的房間名稱列。

1

公共類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 

末級