如何解决通过datagrid,combobox,datetimepicker搜索
我想通过 combobox 和 datimepicker 进行搜索,我有一个表,其中包含3个日期:接收,预报,发送和其他数据,我想然后我的组合框包含先前的标题(3个日期),当我选择其中的一个并且按datetimepicker选择日期时,所选日期的结果将显示在datagrid中
解决方法
确定,因此您的数据在数据表中。如果您还没有这样做,那么在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值更改时更改过滤器
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。