Datagrid没有过滤

时间:2016-04-04 12:05:11

标签: c# mysql visual-studio datagridview

我有一个datagrid,用loadStudentTable()方法填充表数据。

我有搜索框,我试图用包含的值过滤dataGrid。

它似乎无法正常工作。陈述错误:

  

对象引用未设置为对象的实例。

搜索文字更改

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

加载表格很好,只是过滤了搜索文本框中使用的输入。

请提出任何想法或帮助。

1 个答案:

答案 0 :(得分: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);
        }
    }