【问题标题】:search by datagrid,combobox,datetimepicker按数据网格、组合框、日期时间选择器搜索
【发布时间】:2020-09-21 07:14:58
【问题描述】:

我想通过 comboboxdatimepicker 进行搜索,我有一个包含 3 个日期的表格:接收、预测、发送和其他数据,然后我想要 我的组合框包含以前的标题(3 个日期) 当我选择其中一个并通过 datetimepicker 选择日期时,每个所选日期的结果将显示在 datagrid 中

【问题讨论】:

  • 您的数据是否已经在数据表中/datagridview 是否绑定到表中?
  • 是的,我在dataghridview中的所有数据都存在于我的数据库中
  • 这不能回答问题,抱歉 - datatable 不是数据库
  • 对不起,我对数据表和数据库感到困惑,我的数据在数据表中(对不起我的英语)

标签: c# mysql combobox datagrid datetimepicker


【解决方案1】:

好的,所以您的数据在数据表中。如果您还没有这样做,那么在 datagridview 中显示它的一个很好的简单方法是通过绑定,如果我们使用绑定源,我们的生活会变得更轻松:

DataTable dt = new DataTable();
someDataAdapter.Fill(dt);       //datatable is now full of data

dataGridViewX.DataSource = new BindingSource() { DataSource = dt }; //bind througha  bindingsource

BindingSource 支持在底层数据源(数据表,实际上是通过表公开的 DataView)进行过滤时进行过滤。

这意味着我们可以有一个组合框 SelectedIndexChanged 事件处理程序,例如:

somecombo_SelectedIndexChanged(...){

  var bs = dataGridViewX.DataSource as BindingSource;
  var itm = "forecast"; //i presume it comes from somecombo.SelectedItem etc

  bs.Filter = $"[{itm}] = #{datepicker.Value:yyyy-MM-dd}#";

}

我假设您的组合包含表中列的名称。如果不是,您必须将它们从它们显示的任何内容解码为任何列名,然后我们设置一个过滤器,例如:

"[forecast] = #2020-09-21#"

对于日期为 9 月 21 日的所有记录。请注意,日期也可以有时间部分,因此如果您的日期有时间,您将需要更多类似:

 bs.Filter = $"[{itm}] >= #{datepicker.Value:yyyy-MM-dd}# AND [{itm}] < #{datepicker.Value.AddDays(1):yyyy-MM-dd}# ";

带时间的日期就像带小数的数字:1.234 不会被“等于 1”匹配,但会被“大于或等于 1 且小于 2”匹配


同样在 dtp 上有一个事件处理程序,当 dtp 值更改时会更改过滤器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多