2012-11-26 67 views
0

我只是想問是否有另一種填補datagridview中的單元格的替代方法。目前我使用此代碼:Datagridview的優化VB.Net

對於i = DataGridView1.CurrentCell.RowIndex至X - 1

 DataGridView1.Rows(i).Cells("LastName").Value = empcoll.Item(i).LastName 
     DataGridView1.Rows(i).Cells("FirstName").Value = empcoll.Item(i).FirstName 
     DataGridView1.Rows(i).Cells("MiddleName").Value = empcoll.Item(i).MiddleName 
     DataGridView1.Rows(i).Cells("CreatedBy").Value = empcoll.Item(i).CreatedBy 
     DataGridView1.Rows(i).Cells("CreateDate").Value = empcoll.Item(i).CreateDate 
     DataGridView1.Rows(i).Cells("Status").Value = empcoll.Item(i).Status 
     DataGridView1.Rows(i).Cells("DailySalary").Value = empcoll.Item(i).DailySalary 
     DataGridView1.Rows(i).Cells("BirthDate").Value = empcoll.Item(i).BirthDate 



    Next i 

但是當我使用它與大量的記錄的數據庫,它往往會加載緩慢並掛斷電話。

回答

0

通常,您應該將數據綁定到對象上的屬性列而不是您當前使用的方法。

這將是這個樣子

LastNameColumn.DataPropertyname = "LastName" 
FirstNameColumn.DataPropertyname = "FirstName" 
.... 
DataGridView1.DataSource = MyListofEmployeeObjects 

至於加載速度,有兩種選擇:分頁和虛擬模式。

通過分頁,您可以一次從數據庫中提取Y個記錄的X並將它們顯示在網格中。

虛擬模式(http://msdn.microsoft.com/en-us/library/ms171622.aspx)使DataGridView能夠處理從/到數據庫的記錄的自動拉/推,以便您不必一次加載所有記錄。

+0

我從數據庫中存儲數據在這種情況下,列入(T)列表中的員工名單。 我不知道分頁你有一些資源嗎? 此外,我現在正在尋找虛擬模式(使用您建議的鏈接) – error1692

+0

對於分頁,它實際上取決於您如何從數據庫獲取它們以及使用哪個數據庫。基本的想法是,你可以選擇每頁顯示多少項目,然後獲得許多項目。它涉及跳到頁面上的第一個項目,然後選擇您希望在該頁面上顯示的項目數量。 – Origin

+0

我意識到我目前不會做分頁。 我現在在使用虛擬模式,但是我的所有單元格都被填充了相同的條目。 e.Value = empcoll.Item(0).FirstName << on cellvalisterededed事件 如何使用虛擬模式將值添加到每列中? – error1692

0

那麼,我更喜歡使用DatagridView.Rows.Add方法爲無界的DataGridViews。

事情是這樣的:

Dim loData(7) as object 
DataGridView1.Rows.Clear() 
For i = DataGridView1.CurrentCell.RowIndex To x - 1 
    loData(0) = empcoll.Item(i).LastName 
    loData(1) = empcoll.Item(i).FirstName 
    loData(2) = empcoll.Item(i).MiddleName 
    loData(3) = empcoll.Item(i).CreatedBy 
    loData(4) = empcoll.Item(i).CreateDate 
    loData(5) = empcoll.Item(i).Status 
    loData(6) = empcoll.Item(i).DailySalary 
    loData(7) = empcoll.Item(i).BirthDate 
    DataGridView1.Rows.Add(loData) 
Next i 

我通常申報恩枚舉給一個名稱,意爲每個數組元素,使代碼更加清晰:

private enum eCols 
    LastName 
    Firstname 
    MiddleName 
    CreatedBy 
    CreateDate 
    Status 
    DailySalary 
    BirthDate 
end enum 

Dim loData(7) as object 
DataGridView1.Rows.Clear() 
For i = DataGridView1.CurrentCell.RowIndex To x - 1 
    loData(eCol.LastName) = empcoll.Item(i).LastName 
    loData(eCol.FirstName) = empcoll.Item(i).FirstName 
    loData(eCol.MiddleName) = empcoll.Item(i).MiddleName 
    loData(eCol.CreatedBy) = empcoll.Item(i).CreatedBy 
    loData(eCol.CreateDate) = empcoll.Item(i).CreateDate 
    loData(eCol.Status) = empcoll.Item(i).Status 
    loData(eCol.DailySalary) = empcoll.Item(i).DailySalary 
    loData(eCol.BirthDate) = empcoll.Item(i).BirthDate 
    DataGridView1.Rows.Add(loData) 
Next i