我有一个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();
}
加载表格很好,只是过滤了搜索文本框中使用的输入。
请提出任何想法或帮助。
答案 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);
}
}