искать текст в ячейке dataGridView и выделять строку? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь реализовать функцию поиска, когда пользователь вводит текст в текстовое поле (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 Ответ

3 голосов
/ 07 марта 2012

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...