【问题标题】:C# DatagridView search/filterC# DatagridView 搜索/过滤器
【发布时间】:2016-06-28 13:26:50
【问题描述】:

我是 C# 新手,我正在尝试根据组合框值过滤 datagridview。最初我从数据库中加载了带有所有所需值的 datagridview,现在我希望每当用户从组合框中选择任何内容时,DataGridView 中的值也应该改变。一种对我有用的解决方案是在每个组合框值更改时请求数据库并且它可以工作......为此附加了代码

DataRowView view = (DataRowView)comboBox2.SelectedItem;
int year = (int) view.Row["Year"];
DataTable dt = new DataTable();
if (this.OpenConnection() == true)
{
    String query = "Select * from yearly where year = "+year;
    MySqlCommand cmd = new MySqlCommand(query, connection);

    using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
    {
        da.Fill(dt);
    }
}

但是,有没有办法不一次又一次地请求数据库?我可以根据组合框值过滤数据网格视图。任何教程或链接都可以。

【问题讨论】:

  • See this。另外,您是否一直保持连接打开?这不好。
  • 谢谢,不,我没有保持连接打开 :) 每次执行后我都会关闭它

标签: c# winforms datagridview combobox


【解决方案1】:

在组合框的 SelectionChangeCommitted 事件中:

private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Year= '{0}'", comboBox1.SelectedItem.ToString());
}

希望对你有帮助。

【讨论】:

  • 我试过了,但它给出了以下异常。 “对象引用未设置为对象的实例”。
  • @Nixi 什么是空?你检查了吗?
  • @Nixi,您不能准确粘贴,您的控件名称不同。使用答案作为模板。
  • @BerkayYaylaci 谢谢alott :) 这个解决方案在找到空指针异常后有效......这是因为 Combobox.selectedindexchanged 的​​问题......正如我在文档中读到的那样,这个事件被调用loading :) 那时我的 datagridview 还没有准备好
【解决方案2】:

解决方案 1: 如果您的数据经常更改并且您想要最新数据,您可以使用与您相同的代码。

解决方案 2: 从数据源获取数据 - 存储到 DataTable - 根据需要过滤数据并将 DataGridView 源设置为数据集。

您也可以参考this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多