c#如何获取datagridview中的第一列的值,注意不是选中行

我在form5的textbox中输入一个值,判断和form4中的datagridview的第一列值是否相等,不相等就显示未找到,我这程序错哪了啊?在线等答案~~
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if(textBox1.Text != "")
{
if (textBox1.Text != form4.dataGridView1.Columns[1].ToString())
{
MessageBox.Show("未找到对应的信息");
}
}
显示的错误是:索引超出范围。必须为非负值并小雨集合大小。参数名:index

dataGridView1[0][0].ToString()

2点问题
首先第一列的索引不是1,是0
其次第一列直接tostring无意义,一列怎么和值比较?必然要单元格才能和值比较啊追问

什么意思?

追答

表示这个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)

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-09
你的Form4在Form5里必须先实例化后,或者是静态变量才能用form5的Textbox1的值与之比较
第2个回答  2012-04-08
第一列应该是0,不是1
第3个回答  2012-04-08
datagridview的第一列值
这个你指的是列名称吗?Columns[1].ColumnName
如果是第一行第一列,是类似dataGridView1.rows(0).cells(0).value
相似回答