做一个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;
}
}
选择用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;
}
}
2.可以通过DataTable.GetChanges获得自上次调用AcceptChanges以来所做的修改。
3.成功提交以后再AcceptChanges。
4.如果想不出现空白记录,可以为DataTable的Column设置默认值,并在用户触发校验事件或提交动作的时候校验。
还每次换一行的检测事件?
搞默认值是不行啦,因为会换行就要保存, 想了想我有一个按钮是调用 rows.ADD()来添加行的,但是这个点几次就添加几行,怎么做到顶多下面只有一行Added状态?
校验的问题,看看使用CellValidating和CellValidated事件或者RowValidating和RowValidated事件如何。