2016-04-04 4 views
1

У меня есть datagrid, который заполняется табличными данными с помощью метода loadStudentTable().Datagrid не фильтрует

У меня есть окно поиска, в котором я пытаюсь отфильтровать dataGrid со значениями, которые содержат.

Он, похоже, не работает. Штаты ошибка:

Object reference not set to an instance of an object.

Поиск Изменение текста

private void SearchTxt_TextChanged(object sender, EventArgs e) 
     { 
      try 
      { 
       (studentGridView.DataSource as DataTable).DefaultView.RowFilter = string.Format("Student_FName LIKE '%{0}%'", SearchTxt.Text); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

Студенческая нагрузка стола

//Fills out Student table 
    private void loadStudentTable() 
    { 
     SqlConnection conn2 = new SqlConnection(@"Data Source=(LocalDB)\v11.0; AttachDbFilename=C:\Users\Donald\Documents\Visual Studio 2013\Projects\DesktopApplication\DesktopApplication\Student_CB.mdf ;Integrated Security=True"); 
     conn2.Open(); 

     try 
      { 
       SqlCommand cmdDatabase2 = new SqlCommand("Select * from Student", conn2); 
       SqlDataAdapter sda2 = new SqlDataAdapter(); 
       sda2.SelectCommand = cmdDatabase2; 
       DataTable dbdataset2 = new DataTable(); 
       sda2.Fill(dbdataset2); 
       BindingSource bSource2 = new BindingSource(); 

       bSource2.DataSource = dbdataset2; 
       studentGridView.DataSource = bSource2; 
       sda2.Update(dbdataset2); 

       studentGridView.Columns[0].Width = 92; 
       studentGridView.Columns[1].Width = 200; 
       studentGridView.Columns[2].Width = 180; 
       studentGridView.Columns[3].Width = 180; 
       studentGridView.Columns[4].Width = 170; 
       studentGridView.Columns[5].Width = 170; 
       studentGridView.Columns[6].Width = 130;       
      } 
     catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

     conn2.Close(); 
    } 

Загрузка таблицы в порядке, его просто фильтрация какой инпа ut используется в текстовом поле поиска.

Любые идеи или помощь пожалуйста.

+0

__Do not__ вызова '' DataGridView'a GridView' или 'DataGrid' !! Это неправильно и сбивает с толку. Всегда называйте вещи своим именем __right__! Да, требуется больше __four__ писем. – TaW

+0

@TaW Извините, я в следующий раз. Не стесняйтесь редактировать его или просить меня редактировать, и я это сделаю. –

ответ

1

Разделить ваш код, как показано ниже и попробовать ..

private void SearchTxt_TextChanged(object sender, EventArgs e) 
    { 
     try 
     { 

     var bindData = (BindingSource)studentGridView.DataSource; 
     var dataTable = (DataTable)bindData.DataSource; 
     dataTable.DefaultView.RowFilter = string.Format(""Student_FName LIKE '%{0}%'", SearchTxt.Text);  
     studentGridView.Refresh(); 

     } 
     catch(Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

Спасибо! Работает очарование! –

+0

Просто быстрый вопрос, что, если я хочу использовать тот же запрос для поиска Student_Username или Student_SName. Где я могу изменить и что добавить? так как я хочу свести к минимуму повторное использование кода –

+1

Привет @DB. В приведенном выше коде вы просматриваете столбец ** Student_FName **, и если вы хотите выполнить поиск на основе другого столбца, просто измените имя столбца, как следующая строка.Format (" «Student_Username LIKE»% {0}% '", SearchTxt.Text). И если вы отступали для повторного использования кода, создайте общий класс и создайте глобальный объект данных. –

Смежные вопросы