2016-04-04 13 views
1

私は、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); 
      } 
     } 

Studentテーブルのロード

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

は、そのわずかフィルタリング、結構ですどのようなinp utが検索テキストボックスで使用されます。

アイデアや助けてください。

+0

..以下のようにコードを分割してみてください!!これは間違って、混乱しています..常に__right__の名前で物事を呼び出す!はい、それは入力するために__four__文字より多くかかる.. – TaW

+0

@TaW申し訳ありません、私は次回になります。それを編集するか、私に編集を依頼しても構いません。 –

答えて

1

は `` DataGridView`a GridView`または `DataGrid`を呼び出すnot__ __Do

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 **の列を検索しています。そして、別の列に基づいて検索を実行したい場合は、単に列名を次のように変更します。string.Format( " "Student_Username LIKE '%{0}%'"、SearchTxt.Text)また、コードの再利用をインデントすると、共通クラスが作成され、グローバルデータ可能オブジェクトが作成されます。 –

関連する問題