2016-03-22 20 views
-1

我正在一個程序中,我想在應用程序中顯示數據庫的內容,用戶也必須能夠編輯值,所以我決定datagridview會最佳選擇。C#datagridview不包含行

我已成功做出datagridview(通過拖放到winform上),併成功設置數據源(顯示內容)。


設置在DataGridView的數據源:

db = new DatabaseHandler(); 

userDB = db.Get("users"); 
dtgv_users.DataSource = userDB.DefaultView; 
dtgv_users.Update(); 

我還設置了一些事件處理爲編輯的結束和驗證事件:

private void dtgv_users_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    string id = userDB.Rows[e.RowIndex]["id"] + ""; 
    string column = userDB.Columns[e.ColumnIndex].ColumnName; 
    var rows = dtgv_users.Rows; 
    string data = dtgv_users.Rows[e.RowIndex].Cells[e.ColumnIndex].Value + "" 
    db.Update("users", String.Format("{0}='{1}' WHERE id={2}", column, data, id)); 
} 

private void dtgv_users_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    if (e.ColumnIndex == 0) 
     dtgv_users.CancelEdit(); 
} 

但我遇到了一個問題:當我編輯datagridview中的第一行,然後按Enter鍵我得到以下問題:An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll,如果我通過調試手動檢查datagridview中的行是什麼,我意識到它不包含任何行。


我該如何解決這個問題,爲什麼datagridview不包含任何行?

我希望你們能幫助我!

親切的問候, 喬瓦尼


編輯

問題謊稱與Initialize從代碼中刪除這個和它的作品,謝謝!

+0

更改下面的'dtgv_users.Update();'到'dtgv_users.Refresh();'你也有''InitializeComponent();''你的'dtgv_users_CellValidating' eventHandler – MethodMan

+0

我剛纔donet ,並且我收到了同樣的錯誤 –

+0

當你使用調試器時,這個方法返回的是什麼?db.Get(「users」);'a'DataTable,DataSet,...'什麼行錯誤.. – MethodMan

回答

1

我會在這裏添加一個斷點:dtgv_users.DataSource = userDB.DefaultView;並確保您的userDB.DefaultView有值。

另外,什麼是DefaultView - 我假設它是一個表 - 但如果不是直接綁定到表,然後在完成時保存更改。

+0

它有1行 –

+0

也有值,我檢查了datagridview的內容後,它被設置和數據源被設置後有一行內,但apearently它失去了行時,我做了一個改變 –

+0

已經做到了這一點,但它甚至沒有到達那裏。 –