【问题标题】:search in a Datatable在数据表中搜索
【发布时间】:2017-07-19 15:06:52
【问题描述】:

我目前正在处理一个处理文件并创建数据表并为处理结果创建“excel”外观数据网格视图的项目。 流程是打开一个新文件并单击过程。之后,datagridview 将显示一个包含已处理数据的表格。以下是创建表并为每列输入值的函数。

public DataTable createDataTable()
    {
        DataTable dt = new DataTable();

        dt.Columns.Add("Date Time");
        dt.Columns.Add("CAT Protocol");
        dt.Columns.Add("Display");
        //dt.Columns.Add("Command ID");
        dt.Columns.Add("Command Description");

        List<string> timeList = time();
        List<string> catList = read(userSelectedFilePath);
        List<string> displayList = translate(catList);
        List<string> idList = commandID(catList);
        List<string> descList = commandDescription(idList);


        int rows = catList.Count();

        for (int i = 0; i < rows; i++)
        {
            DataRow _myRow = dt.NewRow();
            _myRow["Date Time"] = timeList.ElementAt(i);
            _myRow["CAT Protocol"] = catList.ElementAt(i);
            _myRow["Display"] = displayList.ElementAt(i);
            //_myRow["Command ID"] = idList.ElementAt(i);
            _myRow["Command Description"] = descList.ElementAt(i);
            dt.Rows.Add(_myRow);
        }

        return dt;
    }

然后用户可以使用“查找”功能,该功能将根据用户的输入刷新结果。当用户选择查找时,会弹出一个文本框。当用户按下回车时,数据表将根据命令描述刷新。 我想我需要在这个函数中写一些代码。

 private void TextBoxKeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //write something here
        }
    }

这是我的界面截图。 我的问题是如何在这个应用程序中实现查找功能。我将非常感谢各种帮助。谢谢!

【问题讨论】:

    标签: c# datagridview filter datatable


    【解决方案1】:

    您可以使用 LINQ 获取相应行的所有索引:

    var indices = descList.Select((desc, index) => new { desc, index = index }).Where(item => item .desc.Contains(SearchTextBox.Text)).Select(item => item.index).ToList();
    

    然后清除你的DataGridView并读取所有带有索引的项目,你得到。

    for (int i = 0; i < indices.Count; i++)
    {
        DataRow _myRow = dt.NewRow();
        _myRow["Date Time"] = timeList.ElementAt(indices[i]);
        _myRow["CAT Protocol"] = catList.ElementAt(indices[i]);
        _myRow["Display"] = displayList.ElementAt(indices[i]);
        //_myRow["Command ID"] = idList.ElementAt(indices[i]);
        _myRow["Command Description"] = descList.ElementAt(indices[i]);
        dt.Rows.Add(_myRow);
    }
    

    此外,我建议您为每一行构建一个类:

    public class LogLine{
        public DateTime Date {get;set;} //maybe Convert to DateTime or change to string
        public string Protocol {get;set;}
        public string Display {get;set;}
        public string Command {get;set;}
    }
    

    稍后您可以简单地使用List&lt;LogLine&gt; 来填充您的DataGridView

    这将使您的代码更简洁,并将简化大部分代码。

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2020-05-13
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多