把 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;
}
}
{
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;
}
}
DATAVIEW DV = DT.COPY().DEFAULTVIEW;
DV.ROWFILTER = "你要判断是否重复的列 = '"+txtbox3.text+"'";
if(dv.totable() != null && dv.totable().rows.count > 0)
{
messbox.show("重复了");
}
或者你可以尝试一下这样修改
if(dataGridView1[1,i].Value.ToString() == textBox3.Text) ----》if((dataGridView1[1,i].Value+“”)== textBox3.Text) 如果dataGridView1[1,i].Value为null 你这样转换是有问题的
就是第一次输入重复数字时,程序判断不出来重复,还是保存在了dataGridView中,后面再输入就能判断出来了。
{
//这里面些呀
}
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中,也不计数。
问题是当第一次扫描到重复数据时,程序仍然会自动保存数据并计数。第二次扫描仪后就能判断出来了,实在不知道为何原因,请高手指点,感激!
就是第一次输入重复数字时,程序判断不出来重复,还是保存在了dataGridView中,后面再输入就能判断出来了。你的怎么操作流程是怎样的?
你怎么添加,然后怎么保存,然后怎么判断?
你中间估计跳过了一些东西没说清楚。
dataGridView1[0, a - 1].Value = textBox1.Text;
dataGridView1[1, a - 1].Value = textBox3.Text;
这都是什么东西
a是干什么的
dataGridView1不是有行数的属性么,为什么又要单独定义个a来统计?
而且你这样也没有新加行啊,只是给已有的行赋值,a++之后,不会索引超出范围?
前面都不变,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++
我这样也试了,没有问题的.
问题是你为什么用a-1,当a是0时,a-1是-1
a本身是Int?直接a.ToString()即可
// if(dataGridView1[1,i].Value.ToString() == textBox3.Text)
改成 string s1=dataGridView1[1,i].Value.ToString();
string s2= textBox3.Text;
if(s1==s2)
//这样 看看第一次的s1 跟s2 是不是有相等
修改为for(int i = 0;i < a-1;i++)
避免后面那些空行干扰,空行就别参与判断了
或者textbox.clear()改写为textbox.text="";应该是在键入回车后,文本框换行了,导致文本里多出\r\n
还是把允许换行取消吧