【问题标题】:Is there and easy way to make responsive search result on text box to Data Grid?是否有简单的方法可以使文本框上的响应式搜索结果响应数据网格?
【发布时间】:2017-05-19 01:28:41
【问题描述】:

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

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

我根据用户在组合框中选择的内容使用IF 条件。所以这个案例的代码和问题都没有问题。

回到主要问题,我想让搜索结果响应,例如,如果我在文本文件中有这些数据:

Chicken Nugget
Cheese Nugget
Tofu Nugget
Vegetable Nugget

首先当用户输入“C”字时,dgv 上的结果将显示数据鸡块和奶酪块。其次,当键入“h”(在“C”之后)时,结果将显示 Chicken Nugget 和 Cheese Nugget(再次)。第三,当输入“e”时,(在“Ch”之后),结果将只显示 Cheese Nugget,而且很快。那么有没有简单的代码来解决这个问题?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    如前所述,您可以在表单加载时执行一次,而不是每次击键加载网格。这段代码可以移动到你的表单加载事件中:

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

    要查找一段文本,可以使用字符串“包含”方法。每个被比较的字符串都可以转换为小写,以使比较不区分大小写。您可以使用 DataGridViewRow.Visible 属性仅显示与您的搜索匹配的行。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多