把 for(int i = 0;i < dataGridView1.RowCount-1;i++)
                {
                    if(dataGridView1[1,i].Value.ToString() == textBox3.Text)   //判断textBox3中的数据是否在表格第一列中有重复
                    {
                        retype = true;
                        over_row = i;
                        break;
                    }
                }改为for(int i = 0;i < dataGridView1.RowCount;i++)
                {
                    if(dataGridView1[1,i].Value.ToString() == textBox3.Text)   //判断textBox3中的数据是否在表格第一列中有重复
                    {
                        retype = true;
                        over_row = i;
                        break;
                    }
                }

解决方案 »

  1.   

    datatable dt = DGV.DATASOURCE AS DATATABLE
    DATAVIEW DV = DT.COPY().DEFAULTVIEW;
    DV.ROWFILTER = "你要判断是否重复的列 = '"+txtbox3.text+"'";
    if(dv.totable() != null && dv.totable().rows.count > 0)
    {
    messbox.show("重复了");
    }
      

  2.   

    从逻辑上来看应该没什么问题,没明白你说的“第一次重复判断不出来”是什么意思?
    或者你可以尝试一下这样修改
    if(dataGridView1[1,i].Value.ToString() == textBox3.Text)  ----》if((dataGridView1[1,i].Value+“”)== textBox3.Text)  如果dataGridView1[1,i].Value为null 你这样转换是有问题的
      

  3.   


    就是第一次输入重复数字时,程序判断不出来重复,还是保存在了dataGridView中,后面再输入就能判断出来了。
      

  4.   

    你可以设断点,看看你每次取dataGridView1[1,i].Value都是什么值,不就可以知道为什么没有判断出来了吗
      

  5.   

    - -  不是吧,版主给你答案了呀, 在for里面判断一下就行了呀if(i!= dataGridView1.RowCount)
    {
    //这里面些呀
    }
      

  6.   

            int a = 1;
            private void textBox3_KeyDown(object sender, KeyEventArgs e)
            {
                bool retype = false;
                if (e.KeyCode == Keys.Enter)
                {     
                    for(int i = 0;i < dataGridView1.RowCount-1;i++)
                    {
                        if(dataGridView1[1,i].Value.ToString() == textBox3.Text)
                        {
                            retype = true;
                            break;                      
                        }
                    }
                    if (retype)
                    {
                        MessageBox.Show("此表已经扫描过,请勿重复扫描", "提示");
                        textBox3.Clear();
                    }
                    else
                    {
                        this.label7.Text = Convert.ToInt32(a).ToString();//计数
                        dataGridView1[0, a - 1].Value = textBox1.Text;
                        dataGridView1[1, a - 1].Value = textBox3.Text;
                        textBox3.Clear();
                        dataGridView1[2, a - 1].Value = "合格";//合格与否默认为合格,如果失败手动进行选择更改
                        //InsertData(a-1);
                        a = a + 1;//计数加1                                                
                    }
            }把完整的程序段发上来吧,实现的功能是在textBox3中扫码到数据后,存入到dataGridView中,并且计数,如果dataGridView中已经存在该数据时,则不存入dataGridView中,也不计数。
    问题是当第一次扫描到重复数据时,程序仍然会自动保存数据并计数。第二次扫描仪后就能判断出来了,实在不知道为何原因,请高手指点,感激!
      

  7.   


    就是第一次输入重复数字时,程序判断不出来重复,还是保存在了dataGridView中,后面再输入就能判断出来了。你的怎么操作流程是怎样的? 
    你怎么添加,然后怎么保存,然后怎么判断?
    你中间估计跳过了一些东西没说清楚。
      

  8.   

    还是解决不了,帮忙看看啊,急要用。就是做个生产现场的计数软件,扫码枪扫完条码后数据保存在dataGridView中,并计数。如果扫描到重复的数据,则不保存在dataGridView中,且不计数。现在存在的问题是,扫码枪第一次扫描到重复数据时还是会保存并计数。
      

  9.   

    this.label7.Text = Convert.ToInt32(a).ToString();//计数
                        dataGridView1[0, a - 1].Value = textBox1.Text;
                        dataGridView1[1, a - 1].Value = textBox3.Text;
    这都是什么东西
    a是干什么的
    dataGridView1不是有行数的属性么,为什么又要单独定义个a来统计?
    而且你这样也没有新加行啊,只是给已有的行赋值,a++之后,不会索引超出范围?
      

  10.   

    我把你的代码改了改,自己试了一下,没有问题.当然我没有扫码器,是手填的数据.
    前面都不变,a赋初始值0
    dataGridView1[0, a - 1].Value = textBox1.Text;
                        dataGridView1[1, a - 1].Value = textBox3.Text;
                        textBox3.Clear();
                        dataGridView1[2, a - 1].Value = "合格";//合格与否默认为合格,如果失败手动进行选择更改
    ->
    dataGridView1.rows.add();
    dataGridView1[0, a].Value = textBox1.Text;
    以下都用a,而不是a-1还有,代码有精简的余地,比如textbox1.clear(),既然在if和else里都出现了,干嘛不拿到外面来,放到最后即可.
    a=a+1 -> a++
      

  11.   

    a是用来统计扫码次数的,相当于统计Enter键的按下的次数,程序就是给已有的行赋值。现在奇怪的是第一次遇到重复条码时还是会记录,判断不出来;但是第二次、第三次扫描到重复条码时就能判断出来了
      

  12.   

    你是在初始化的时候就给表格添加了许多空行是吧
    我这样也试了,没有问题的.
    问题是你为什么用a-1,当a是0时,a-1是-1
      

  13.   

    Convert.ToInt32(a).ToString();//计数
    a本身是Int?直接a.ToString()即可
      

  14.   


     // if(dataGridView1[1,i].Value.ToString() == textBox3.Text) 
    改成 string s1=dataGridView1[1,i].Value.ToString();
    string s2= textBox3.Text;
    if(s1==s2)
    //这样 看看第一次的s1 跟s2 是不是有相等 
      

  15.   

    用断点测试了一下,第一次扫码输入的时候,textBox3里的值没有存入到dataGridView相应的列中,值还是为空,所以第一次出现重复时没有判断出来,请问下该如何修改,第一次扫码的值能保存进来啊
      

  16.   

    for(int i = 0;i < dataGridView1.RowCount-1;i++)
    修改为for(int i = 0;i < a-1;i++)
    避免后面那些空行干扰,空行就别参与判断了
      

  17.   

    断点测试了一下,第一次输入222222时,DataGridView中值是“222222”,当第二次还是输入222222时,DataGridView中值是“\r\n222222”,是不是因为这个原因所以没判断出来啊?怎么修改呢
      

  18.   

    textbox设置为不允许换行
    或者textbox.clear()改写为textbox.text="";应该是在键入回车后,文本框换行了,导致文本里多出\r\n
      

  19.   

    textbox.text="";不行,实测,发现不管用clear()方法还是将内容赋值为空,里面行数最少为2行,再次回车并清空,不会变成3行
    还是把允许换行取消吧