using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: 这行代码将数据加载到表“sanfuyibiaoDataSet.lyxstart”中。您可以根据需要移动或移除它。
            this.lyxstartTableAdapter.Fill(this.sanfuyibiaoDataSet.lyxstart);
            label2.Text = dataGridView1[1, 0].Value.ToString();
            label3.Text = dataGridView1[1, 3].Value.ToString();
        }        private void button1_Click(object sender, EventArgs e)
        {
            bool a = false;
            for (int x = 0; x < dataGridView1.RowCount; x++)
            {
                
                if (textBox1.Text==dataGridView1[1,x].Value.ToString().Trim())
                {
                    a = true;
                    break;
                }
                
            }
            if (a)
            {
                label1.Text = "值相同!";
            }
            else
            {
                label1.Text = "值不同!";
            }
        }
    }
}请高手看看这句 if (textBox1.Text==dataGridView1[1,x].Value.ToString().Trim())错误提示是 未将对象引用设置到对象的实例

解决方案 »

  1.   

    比较字符串,应该用equals()方法吧
      

  2.   

    你试试这样行吗?
    if (textBox1.Text==dataGridView1[1][x].Value.ToString().Trim())
      

  3.   

     应该是空指针了  定义了没有new  你找找
      

  4.   

    dataGridView1[1,x].Value不存在
    你Debug下 看看dataGridView1[1,x].Value是不是为Null
      

  5.   

    肯定是 dataGridView1[1,x]==null ,你看看哪个是行哪个是列吧,是不是搞反了?根据你遍历的思路,x应该代表行号吧,但是按照一般习惯描述2围数组等,先行号再列号
      

  6.   

    dataGridView1[1,x].Value 是空的
    判断
    if(!string.IsEmptyOrEmpty(dataGridView1[1,x].Value))
    {if (textBox1.Text==dataGridView1[1,x].Value.ToString().Trim())
      {
      a = true;
      break;
      }}
      

  7.   

    dataGridView1[1,x]改成dataGridView1[x,1]
      

  8.   

    if ((textBox1.Text).equals(dataGridView1[1,x].Value.ToString().Trim()))
    试试这个
      

  9.   

    dataGridView1[1,x].Value可能会是null
    要先和DBNULL对比
      

  10.   

    dataGridView1[1][x].Value.ToString().Trim())
      

  11.   


    if(dataGridView1[1,x].Value!=null)
    {
    if (textBox1.Text==dataGridView1[1,x].Value.ToString().Trim())
    }先做null判断
      

  12.   


    奇怪了,怎么那么多人眼睛干什么去了,这个明显是个低级错误,第一个是行号,第二个才是列号,楼主弄反了,那些不懂程序的人不要乱指点,免得误人.什么"dataGridView1[1,x].Value"可能是null,你这么认定之前也不想想,Value是dataGridView1[row,cum]的固有属性,是通过get访问器返回的,怎么可能是空呢?当人家微软吃干饭的,会返回空值?
      

  13.   

    给个循环取列值的例子!看看 有帮助没!public void ChangeColor()
            {
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    if (dataGridView1.Rows[i].Cells["EmailTypeName"].Value.ToString() == "未阅读")
                    {
                        for (int j = 0; j < dataGridView1.Rows[i].Cells.Count; j++)
                        {
                            dataGridView1.Rows[i].Cells[j].Style.BackColor = Color.Red;
                        }
                    }
                }
            }
      

  14.   

    这里的i就是楼主的x,楼主的x就是这里的"EmailTypeName"
      

  15.   

    看来很多人都错了 包括水平很高的人啊 都烦这个低级错误 别的地方不知道 反正c#的dataGridView是先列号在行号 如果不信可以自己试试 我问过一个干2年c#编程的朋友 他也犯了这个错误
      

  16.   

    "for (int x = 0; x < dataGridView1.RowCount; x++)"
    别的不看,单看这句,这句什么意思呢?意思就是dataGridView1有RowCount行,然后一行行遍历,楼主是这个意思吧?这里变量x就是行号了,没错吧?好,我们再看看System.Windows.Forms.DataGrid类型,你的dataGridView1是这里类型的吧?帮助里面明显提示GridView[int rowIndex,int columnIndex],rowIndex在这里就是行号,也就是变量x.而楼主"if (textBox1.Text==dataGridView1[1,x].Value.ToString().Trim())"把行号错误的当作列号使用,当x的值超过列数时,dataGridView1[1,x]返回的就是null,了然后再引用就会出现经典提示错误!