標籤:
最近做項目需要對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();
View Code
做到這裡,實際上完成了即時編輯、添加,但是,這樣是遠遠不夠的,資料是更新、添加到資料庫,那麼怎麼樣重新整理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錯誤,只需要開啟這個事件就可以了。
C#DataGridView編輯、添加行