我们经常要用到DataGridView控件来显示数据表,传统的新增和编辑一条数据的方式是新增数据后刷新DataGridView来显示,或选中一条数据来进行编辑,保存。这对于维护一张数据表来说很常见也很好用,但如果在一个界面里面同时有很多待编辑的数据,里面可能有TextBox、DropDownList、DataGridView等各种控件,我们要对这些数据进行编辑、保存,这种情况下我们希望编辑完所有的数据后一起保存,这就要求DataGridView控件可以内建的方式来新增和编辑数据,如同常用的Excel,对所有的行和列做完新增、编辑或删除等所有操作后再保存数据。
在C#.NET中用DataGridView我们也可以实现。
1、首先设置DataGridView的属性:
dgv.AllowUserToAddRows = True;
dgv.AllowUserToDeleteRows = True; 等;
编辑好要显示的列。此时DataGridView会自动内建新行,我们可以新增若干行数据;
*保存数据:
我是使用的linq来实现和数据库交互,做保存操作前先执行EndEdit(),否则刚填写而未失去焦点的数据找不到。
2、已存在数据要进行绑定的情况
直接对DataGridView进行数据绑定的话AllowUserToAddRows会失去作用,不会自动内建新行。可以用BindingSource来实现数据绑定:
设置bs.AllowNew = true; 这样绑定完数据后新行会自动出现,可以对原来的数据进行编辑,也可以新增数据。
编辑完成后,保存数据时要先删掉原来的数据,再把表中的数据逐行插入:
foreach (DataGridViewRow r in dgv.Rows)
{
if (!r.IsNewRow)
{
PM_Title pt = new PM_Title();
pt.dataID = datID;
pt.contents = r.Cells["contents"].Value.ToString();
tdc.PM_Title.InsertOnSubmit(pt);
}
}
tdc.SubmitChanges();
}
3、数据列中有DataGridViewComboBoxColumn时的情况
首先初始化时绑定ComboBox数据;
空数据新增时不会有什么问题;
需要绑定数据时,在新行会出现“DataGridViewComboBoxColumn 值为空”的异常,此时对DataGridView添加DataError,不用做任何处理,可以解决。
4、数据列中需要日期选择控件时
DataGridView的列属性中默认没有日期选择控件,可以继承DataGridViewColumn和C#类库里的DateTimePicker组件来实现自己的日期选择控件。
日期选择组件参考:http://blog.csdn.net/lgh112437/archive/2010/01/27/5262122.aspx
PS: 效果图