DataGridView 主键列 是否唯一的判断
本次项目中,采用datagridview来显示、修改、删除数据。其中,对于主键列是否唯一,开始因为较为简单,直接判断某一个值是否在数据库中存在多行就行了,后来,经过不断调试,才发现了大量的问题,总结如下。
首先,项目中写了一个函数 public int IsExisted(string user)用于得到某一个值(主键列的值)在数据库中有几行,校验的时候是判断其值是否等于1。
1、初始化时产生的问题
在初始化的时候,会调用datagridview的cellValidating,此时,会对数据库中本来的数据进行判断,从而造成错误。
2、选中主键列的一个cell,但是没有修改
当焦点移动时,进行校验,此时,判断其值等于1,从而造成错误。
3、在项目中,由于允许用户新增,如点击了最新的一行,却没有输入,则也会校验错误。
对于前面的两种错误,可以判断其值是否真正的发生了变化。同时,这些是数据库已存在的数据,所以,应当与新增的行的数据区分开,代码如下:
if (e.RowIndex < OldRowsCounts-1) //代码在cellValidating函数中,其中OldRowsCounts-1值得是数据库中的数据的行数 { if (dataGridView1[e.ColumnIndex, e.RowIndex].EditedFormattedValue.Equals(DT.Rows[e.RowIndex][e.ColumnIndex])) { dataGridView1[e.ColumnIndex, e.RowIndex].Style.ForeColor = Color.Black; return; } }
对于第三个错误,可以直接判断,然后取消操作就可以了。
if (e.RowIndex == dataGridView1.NewRowIndex) return;