在dataGridView的单元格中搜索文本并突出显示该行?

时间:2012-03-06 23:13:47

标签: c# search datagridview find

我试图实现搜索功能,当用户在文本框中输入文本(tbPartNum)然后单击“查找”按钮时,它会搜索dataGridView1中的单元格,一旦找到它,它会突出显示整行黄色。我的代码如下,显然无法正常工作,它会抛出一个错误,指出“NullReferenceException未处理”,并在其下面“对象引用未设置为对象的实例。”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace GBstock
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // populate the dataGridView with the Excel File
            string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", @"C:\Documents and Settings\rghumra\Desktop\Visual Studio\GBstock\GBstock\bin\Debug\FORM TEST.xlsx");
        string query = String.Format("select * from [{0}$]", "Sheet1");
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);
        dataGridView1.DataSource = dataSet.Tables[0];

        // populates the comboBox (cbSuppList) with all column headers
        foreach (DataGridViewColumn col in dataGridView1.Columns)
            {
                cbSuppList.Items.Add(col.HeaderText);
            }
    }

    private void btnFind_Click(object sender, EventArgs e)
    {
        // Code to search the  alphanumneric Part Number (in Column1 header called "PART NUMBER") and highlihgt the row
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Cells["PART NUMBER"].Value.ToString().Equals(tbPartNum.Text))
            {
                dataGridView1.Rows[row.Index].DefaultCellStyle.BackColor = Color.Yellow;
            }
        }
    }

    private void fileToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Instructions instructionForm = new Instructions();
        instructionForm.Show();
    }

    private void partToolStripMenuItem_Click(object sender, EventArgs e)
    {
        NewPart newPartForm = new NewPart();
        newPartForm.Show();
    }

    private void supplierToolStripMenuItem_Click(object sender, EventArgs e)
    {
        NewSupplier newSuppForm = new NewSupplier();
        newSuppForm.Show();
    }
}

}

1 个答案:

答案 0 :(得分:3)

NullReferenceException您遇到的最有可能的原因是您的网格包含null单元格值,这些值会在您的查找处理程序的foreach中进行扫描。尝试更改以下行:

if (row.Cells["PART NUMBER"].Value.ToString().Equals(tbPartNum.Text))

var cellValue = row.Cells["PART NUMBER"].Value;
if (cellValue != null && cellValue.ToString() == tbPartNum.Text)