我正在开发一个程序,我希望在应用程序中显示数据库的内容,用户还必须能够编辑值,因此我认为数据网格视图是最佳选择。
我已成功制作了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中的第一行并按回车时我得到以下问题:An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
,如果我通过调试手动检查datagridview中的行是什么,我意识到它不包含任何行。
我如何解决这个问题,为什么datagridview不包含任何行?
我希望你们能帮帮我!
亲切的问候, 乔瓦尼
修改
问题在于Initialize
从代码中移除了这个问题并且它有效,谢谢!。
答案 0 :(得分:1)
我会在此处添加一个断点:dtgv_users.DataSource = userDB.DefaultView;
并确保您的userDB.DefaultView
中包含值。
此外,DefaultView
是什么 - 我假设它是一个表 - 但如果不是直接绑定到表,那么在完成后保存更改。