做一个DataGridView,要能做在里面进行编辑增加和修改、删除记录,我的方法是:在换行的时候通过RowEnter事件来监控DataRow的状态(Modified/Unchanged/Deleted/Added),如果是修改就update,如果删除就delete,添加就insert into,Unchanged就不处理,实现每次换行的时候对数据库表进行修改。  
     选择用RowEnter事件来监控换行不好,给我推荐一个更合适的一个事件吧? (试换了几个事件多不如意)
     程序在用起来的时候总有点小问题,有经验的帮忙看下程序,提点修改意见。比如说如何不让出现空白记录?
     
     DataGridView是一个开发必须熟练的东东,高手们肯定多游刃有余了,希望多多抛砖引玉
        DataGridView.DataSource = set.Tables["WG_CAR"];
      private DataGridView_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
                int i_currentIndex = dG_NoInList.CurrentRow.Index;
              SqlConnection con = new SqlConnection("Persist Security Info=False;User id=" + Class.SA + ";pwd=" + Class.PASSWORD + ";database=" +
                            Class.clientdatabase + ";server=" + Class.localserver);
                    con.Open();
                    DataRow row = set.Tables["WG_CAR"].Rows[i_currentIndex];
                    switch (row.RowState)
                    {
                        case DataRowState.Unchanged:
                            break;
                        case DataRowState.Modified:
                                set.Tables["WG_CAR"].AcceptChanges();
                                Modified(con, set, i_currentIndex);//提交修改
                            break;
                        case DataRowState.Deleted:
                                Deleted(con, set, i_currentIndex, carid, carcode);
                                set.Tables["WG_CAR"].AcceptChanges();//删除操作
                            break;
                        case DataRowState.Added:
                                set.Tables["WG_CAR"].AcceptChanges();
                                Added(con, set, i_currentIndex);//提交添加
                            break;
                        case DataRowState.Detached:
                            break;
                        default:
                            break;
                    }
        }

解决方案 »

  1.   

    1.修改完了一次性提交。
    2.可以通过DataTable.GetChanges获得自上次调用AcceptChanges以来所做的修改。
    3.成功提交以后再AcceptChanges。
    4.如果想不出现空白记录,可以为DataTable的Column设置默认值,并在用户触发校验事件或提交动作的时候校验。
      

  2.   

       要求是换一行就根据状态进行保存记录,所以一次性修改不考虑
       还每次换一行的检测事件?
       搞默认值是不行啦,因为会换行就要保存, 想了想我有一个按钮是调用 rows.ADD()来添加行的,但是这个点几次就添加几行,怎么做到顶多下面只有一行Added状态?
      

  3.   

    如果需要这样设计的话,点击添加按钮之后,立刻将其禁用,这样可以避免重复点击。
    校验的问题,看看使用CellValidating和CellValidated事件或者RowValidating和RowValidated事件如何。