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;

  

posted @ 2012-08-06 21:08  zhxm  Views(2326)  Comments(0Edit  收藏  举报