2012-03-06 51 views
0

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

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(); 
    } 
} 

}

回答

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) 
+0

@jimm_keen - 谢谢你的解释THI为好,它的作品完美。 – Rg786 2012-03-06 23:32:53

相关问题