【问题标题】:How to make the list of Items displayed in the dataGridView to be (filtered?)如何使 dataGridView 中显示的项目列表成为(过滤?)
【发布时间】:2016-11-02 19:45:59
【问题描述】:

如何做到这一点?

从用户的角度来看,C# Winforms,当用户在搜索文本框中键入内容时,我希望 dataGridView 中显示的项目列表被(过滤?)

这是目前正在发生的事情:

dataGridView 使用项目列表作为其数据源,类似于:

dgv.DataSource = _myItemList;

_myItemList 的每个项目都有 2 个属性(id、描述)

dgv 下方有一个文本框,用户可以在其中搜索列表中的项目

目前,当用户在文本框中输入时,下面会出现一个过滤后的 _myItemList(与此过滤后的列表出现的方式相同,这也是我希望 dgv 发生的情况)

自动的东西发生在这段代码中

foreach(_myItemList 中的变量项) { 字符串字=项目。描述; textBoxCollection.Add(word); }

        textBoxSearchEmployeeList.AutoCompleteMode = AutoCompleteMode.Suggest;
        textBoxSearchEmployeeList.AutoCompleteSource = AutoCompleteSource.CustomSource;
        textBoxSearchEmployeeList.AutoCompleteCustomSource = textBoxCollection;

例如,如果用户在文本框中键入“Vac”,则会出现 _myItemList 中所有以“Vac”开头的字符串。然后随着用户继续键入 dgv 中的项目将减少。这样当用户在文本框中输入“假期”时,dgv 只显示一行“假期”。

如果不清楚我要做什么,请告诉我。

【问题讨论】:

  • 这取决于您用作DataGridView 数据源的类型。以this post 为例。

标签: c# winforms datagridview


【解决方案1】:

如果我没理解错,你找这个,

我用行创建了简单的DataTable。 (你可以在 gif 上看到)我有一个 textbox 来过滤。这里,

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            DataView dv = (dataGridView1.DataSource as DataTable).DefaultView;
            dv.RowFilter = "Name Like '"+ textBox1.Text +"%'";
        }

结果;

希望有帮助,

【讨论】:

  • 所以在实施您的解决方案之后......按照您的方式进行操作需要我将 List myList 转换为 DataTable。没有DataTable怎么办?
  • @greg 使用 linq 搜索您的列表,然后在文本更改事件结束时将其设置为数据源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多