C# 按datagrid、combobox、datetimepicker进行搜索
我想按组合框和datimepicker进行搜索,我有一个表,其中包含3个日期:接收、预测、发送和其他数据,然后我想我的组合框包含以前的标题3个日期,当我选择其中一个,并选择date by datetimepicker时,所选每个日期的结果将显示在datagrid中,因此,您的数据位于数据表中。如果您还没有这样做,那么在datagridview中显示它的一个简单方法是通过绑定,如果我们使用bindingsource,我们的生活会变得更轻松:C# 按datagrid、combobox、datetimepicker进行搜索,c#,mysql,combobox,datagrid,datetimepicker,C#,Mysql,Combobox,Datagrid,Datetimepicker,我想按组合框和datimepicker进行搜索,我有一个表,其中包含3个日期:接收、预测、发送和其他数据,然后我想我的组合框包含以前的标题3个日期,当我选择其中一个,并选择date by datetimepicker时,所选每个日期的结果将显示在datagrid中,因此,您的数据位于数据表中。如果您还没有这样做,那么在datagridview中显示它的一个简单方法是通过绑定,如果我们使用bindingsource,我们的生活会变得更轻松: DataTable dt = new DataTable
DataTable dt = new DataTable();
someDataAdapter.Fill(dt); //datatable is now full of data
dataGridViewX.DataSource = new BindingSource() { DataSource = dt }; //bind througha bindingsource
BindingSource支持在底层数据源访问datatable时进行过滤,实际上是通过该表公开的DataView进行过滤
这意味着我们可以选择一个组合框,如DexChanged事件处理程序:
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值更改时更改过滤器您的数据是否已经在datatable中/datagridview是否绑定到该表?是的,dataghridview中的所有数据都存在于我的Databases中,这并不能回答问题,对不起,a不是数据库对不起,我把datatable和数据库搞混了,我的数据在datatable中,对不起,我的英语不好