最近做项目需要对winfrom中的DataGirdView控件进行实时编辑个添加,保证跟数据库的数据实时同步起来。
需求:对DataGirdView进行编辑、添加,保证数据跟数据库同步。
分析:这样是要对某个事件进行操作,在完成时候是做添加还是修改操作,判断是添加还是修改可以通过ID来判断,如果数据库存在同样的ID,则编辑,不存在则进行添加,操作明确了,就是选择事件了,DataGridView事件很多,我选择的是CellEndEdit事件(当前选定单元格编辑模式停止时发生),具体的事件有很多,针对不同情况选择不同事件。
//对行、列坐标进行判断 int rowIndex = e.RowIndex; int colIndex = e.ColumnIndex; if (rowIndex < 0 || colIndex < 0) return; //取值操作 string id = this.gvPerson.Rows[rowIndex].Cells[0].Value.ToString(); string sql = @"select * from Person where ID=‘" + id + "‘"; DataTable dt = DBHelper.ExecuteTable(sql, CommandType.Text, null); if (dt.Rows.Count > 0) { //执行修改操作 } else { //执行添加操作 } DoWork();
做到这里,实际上完成了实时编辑、添加,但是,这样是远远不够的,数据是更新、添加到数据库,那么怎么样刷新DataGirdView呢?
public delegate void MyInvoke(); public void DoWork() { MyInvoke mi = new MyInvoke(LoadData); this.BeginInvoke(mi); } public void LoadData() { string sql = @"select * from Person"; DataTable dt = DBHelper.ExecuteTable(sql, CommandType.Text, null); this.gvPerson.DataSource = dt; }
如果跟平时一样,重新加载一次,那样的刷新不了的,反而会报错,用委托的方式可以得到解决。
在做DataGridView的操作时,会碰到DataError错误,只需要打开这个事件就可以了。
时间: 2024-11-13 05:59:23