我在form5的textbox中输入一个值,判断和form4中的datagridview的第一列值是否相等,不相等就显示未找到,我这程序错哪了啊?在线等答案~~
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if(textBox1.Text != "")
{
if (textBox1.Text != form4.dataGridView1.Columns[1].ToString())
{
MessageBox.Show("未找到对应的信息");
}
}
显示的错误是:索引超出范围。必须为非负值并小雨集合大小。参数名:index
什么意思?
追答表示这个DataGridView的第一行第一列这一单元格
追问不只是第一行,而是要与所有行的第一列的值比较
追答那就foreach比较吧,不可能直接把列和一个string比较的
bool result=false;
foreach(var each in form4.dataGridView1.Columns[0])
{
if (textBox1.Text == each.value.ToString())
{
result=true;
break;
}
}
if(!result) MessageBox.Show("未找到对应的信息");
就是要把textbox的值与每行的第一列值分别做一遍比较,如果都不相等,就显示未找到。那我应该怎么写才对呢?
追答bool result=false;
foreach(var each in form4.dataGridView1.rows)
{
if (textBox1.Text == each[0].value.ToString())
{
result=true;
break;
}
}
if(!result) MessageBox.Show("未找到对应的信息");
以上,二选一吧,建议这种
if (textBox1.Text == each[0].value.ToString())这句打出来有错误呀,显示无法将带[]的索引应用于"object"类型的表达式
追答bool result = false;
foreach(DataGridViewRow each in form4.dataGridView1.Rows) {
if(textBox1.Text == each.Cells[0].Value.ToString()) {
result = true;
break;
}
}
修改完毕。
好吧,发烧的时候,总是不太靠谱。
啊,这个问题是解决了,可是如果我在if(!result) MessageBox.Show("未找到对应的信息");这句后面加上else,也就是判断相等的时候应该显示表,可还是显示未找到对应的信息,怎么回事呀?
追答if(!result) {
MessageBox.Show("未找到对应的信息");
return;
}
//显示表的流程
这样应该不会进才是
加了return后不行,如果不加的话先显示未找到对应的信息,然后显示出表了……难道是语句顺序有问题?
追答显示对话框就说明已经满足了if的条件,也就是没有找到对应信息,你查下看看吧
追问但是我输入的值和表的第一列是一样的,相当于此时的提示框是多余的……
追答肯定字符串比较的时候还是认为不同了。
比较字符串的时候,加trim()去首尾的空格试试
还有大小写?
不然你试下string.Compare(textBox1.Text.Trim(),each.Cells[0].Value.ToString().Trim(),true)