C# 使用windows窗体应用程序进行特征化搜索

C# 使用windows窗体应用程序进行特征化搜索,c#,winforms,datagridview,C#,Winforms,Datagridview,我在我的windows表单应用程序中有一个搜索文本框,当我在文本框中写入h,然后在h的datagridview中显示结果,当我在搜索文本框中添加h和a类似ha,然后在的datagridview中显示结果ha及其变化导致datagridview从h变为ha,与手机联系人搜索相同。我的工作方式如下: public partial class Form2 : Form { SqlConnection connection = new SqlConnection("Data Source=(Lo

我在我的
windows表单应用程序中有一个搜索文本框
,当我在文本框中写入
h
,然后在
h
的datagridview中显示结果,当我在搜索文本框中添加
h
a
类似
ha
,然后在的datagridview中显示结果
ha
及其变化导致datagridview从
h
变为
ha
,与手机联系人搜索相同。我的工作方式如下:

public partial class Form2 : Form
{
    SqlConnection connection = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=C:\\Users\\Administrator\\Documents\\Contact.mdf;Integrated Security=True;");
    SqlDataAdapter da = new SqlDataAdapter();
    DataSet ds = new DataSet();
    public Form2()
    {
        InitializeComponent();            
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        bindDatagridview();  
        if (textBox1.Text != string.Empty)      
        {      
            search();            
        }
    }
    public void bindDatagridview()
    {
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();
        da.SelectCommand = new SqlCommand("Select * from contactsinfo", connection);
        da.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];
        //dataGridView1.DataBindings();
    }
    public void search()
    {
        da.SelectCommand = new SqlCommand("Select * from contactsinfo where ContactName = '" + textBox1.Text + "'", connection);
        da.Fill(ds);
        dataGridView1.DataSource = ds.Tables[0];
        clear();
    }
}
但这仅在加载表单且仅在第一次加载表单时起作用: 请建议我做什么,等待你的答复。
谢谢。

如果您可以一次加载所有联系人,那么这很简单。在表单加载时,获取所有联系人并将其保存在
DataView
中。然后将栅格绑定到此视图:

DataView contactsView;

private void Form2_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        var da = new SqlDataAdapter("SELECT * FROM from contactsinfo", conn);
        da.Fill(dt);
    }

    contactsView = dt.AsDataView();
    dataGridView1.DataSource = contactsView;    
}
然后,当过滤器文本框中的文本发生更改时,只需更改
数据视图的行过滤器即可:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    contactsView.RowFilter = 
       String.Format("ContactName LIKE '{0}%'", textBox1.Text);
}
如果无法预加载所有数据,则应使用相同的
TextChanged
事件来查询过滤后的数据


注意:您应该在用户输入中处理

它工作不正常,我得到异常
字段“search.Form2.contactsView”从未分配给,并且在这一行
数据视图contactsView,它的默认值始终为null@user88请仔细阅读样本。在绑定网格之前有
contactsView
初始化