C# 有没有一种简单的方法可以使文本框上的搜索结果响应数据网格?

C# 有没有一种简单的方法可以使文本框上的搜索结果响应数据网格?,c#,winforms,C#,Winforms,我有一部分程序,有普通的搜索功能,用户在文本框中输入数据,它会根据用户输入的内容显示结果。这是我的密码: private void textBox1_TextChanged(object sender, EventArgs e) { Boolean find = false; if (cmbSearchFilter.Text == "Product Name") { int row = 0; string line, search;

我有一部分程序,有普通的搜索功能,用户在文本框中输入数据,它会根据用户输入的内容显示结果。这是我的密码:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    Boolean find = false;
    if (cmbSearchFilter.Text == "Product Name")
    {
        int row = 0;
        string line, search;
        string[] strArray = new string[6];
        dataGridView1.Rows.Clear();
        dataGridView1.ColumnCount = 7;
        dataGridView1.Columns[0].Name = "Nugget ID";
        dataGridView1.Columns[1].Name = "Nugget Name";
        dataGridView1.Columns[2].Name = "Nugget Description";
        dataGridView1.Columns[3].Name = "Nugget Ingredient";
        dataGridView1.Columns[4].Name = "Nugget Stock";
        dataGridView1.Columns[5].Name = "Nugget Price";
        F = new FileStream("Nugget.txt", FileMode.Open, FileAccess.Read);
        R = new StreamReader(F);
        search = txtSearch.Text;
        while ((line = R.ReadLine()) != null)
        {
            strArray = line.Split(new string[] { "#" }, StringSplitOptions.None);
            if (search.Equals(strArray[1]))
            {
                find = true;
                dataGridView1.Rows.Add();
                String[] s = line.Split('#');
                for (int i = 0; i <= s.Count() - 1; i++)
                {
                    dataGridView1[i, row].Value = s[i];
                }
                row++;
            }
        }
        R.Close();
        F.Close();
    }
}
首先,当用户键入“C”字时,dgv上的结果将显示数据鸡块和奶酪块。其次,当输入“h”(在“C”之后)时,结果将显示鸡块和奶酪块(再次)。第三,当输入“e”(在“Ch”之后)时,结果将只显示奶酪块,很快就会显示。那么有没有一个简单的代码来解决这个问题呢?

F和R没有声明。
在文本框中键入的每个字符都会重新创建所有datagridview列,打开并读取文件,然后手动填充dgv。我可能会在类级别创建一个字符串列表来保存文件信息,并在第一次为空时仅填充该列表,然后将该列表用作dgv的数据源。

如前所述,不必每次击键加载网格,只需在表单加载时加载一次即可。此代码可以移动到表单加载事件:

private void LoadGrid()
{
    int row = 0;
    string line;
    string[] strArray = new string[6];
    dataGridView1.Rows.Clear();
    dataGridView1.ColumnCount = 7;
    dataGridView1.Columns[0].Name = "Nugget ID";
    dataGridView1.Columns[1].Name = "Nugget Name";
    dataGridView1.Columns[2].Name = "Nugget Description";
    dataGridView1.Columns[3].Name = "Nugget Ingredient";
    dataGridView1.Columns[4].Name = "Nugget Stock";
    dataGridView1.Columns[5].Name = "Nugget Price";
    FileStream F = new FileStream("Nugget.txt", FileMode.Open, FileAccess.Read);
    StreamReader R = new StreamReader(F);

    while ((line = R.ReadLine()) != null)
    {
        strArray = line.Split(new string[] { "#" }, StringSplitOptions.None);

        dataGridView1.Rows.Add();
        String[] s = line.Split('#');
        for (int i = 0; i <= s.Count() - 1; i++)
        {
            dataGridView1[i, row].Value = s[i];
        }
    }

    R.Close();
    F.Close();
}
private void LoadGrid()
{
    int row = 0;
    string line;
    string[] strArray = new string[6];
    dataGridView1.Rows.Clear();
    dataGridView1.ColumnCount = 7;
    dataGridView1.Columns[0].Name = "Nugget ID";
    dataGridView1.Columns[1].Name = "Nugget Name";
    dataGridView1.Columns[2].Name = "Nugget Description";
    dataGridView1.Columns[3].Name = "Nugget Ingredient";
    dataGridView1.Columns[4].Name = "Nugget Stock";
    dataGridView1.Columns[5].Name = "Nugget Price";
    FileStream F = new FileStream("Nugget.txt", FileMode.Open, FileAccess.Read);
    StreamReader R = new StreamReader(F);

    while ((line = R.ReadLine()) != null)
    {
        strArray = line.Split(new string[] { "#" }, StringSplitOptions.None);

        dataGridView1.Rows.Add();
        String[] s = line.Split('#');
        for (int i = 0; i <= s.Count() - 1; i++)
        {
            dataGridView1[i, row].Value = s[i];
        }
    }

    R.Close();
    F.Close();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
    string search = txtSearch.Text;

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells["Nugget Name"].Value != null)
        {
            string productName = row.Cells["Nugget Name"].Value.ToString();
            row.Visible = productName.ToLower().Contains(search.ToLower());
        }
    }
}