首页 > 解决方案 > Bindingsource 过滤器无法正常工作

问题描述

我需要使用 datepicker1 和 datepicker2 过滤日期之间的 ADGV,但我的代码只过滤 Day,无论它只过滤 DAYS 之间的月份或年份。我试图给我的 var 值添加消息: 3/1/2018 的字符串 datetry 是 01.03.2018 datepicker1 是 01.05.2019 datepicker2 是 27.05.2019 并且过滤器看起来像这样 Data >= '01.05.2019' AND Data < '27.05.2019 ' 并且我没有在列表中获得第一天,列表从第 2 天(2018 年 3 月 2 日)开始。我尝试在 csv 文件中将格式更改为 3.1.2018,但这没有帮助。

PS 我从 .csv 文件中获取数据,没有使用数据库,所以我不能使用 sql 查询。

我试图用谷歌搜索它,发现了类似的问题和解决方案,但没有一个和我完全一样,我无法将它应用到我的代码中,因为我不擅长编程,但我需要制作这个“过滤数据”程序。

string line;
 while ((line = sr.ReadLine()) != null)
 {
 if (!(line.Contains("#")))
{
 string[] columns = line.Split(';');
string datynski = columns[0];
DateTime dateTry = DateTime.ParseExact(datynski,"M/d/yyyy",CultureInfo.InvariantCulture);
datatable1.Rows.Add(dateTry.ToShortDateString(), columns[1], columns[2], columns[3]);
}
bindingsource1.DataSource = datatable1;
bindingsource1.Filter = "Data >= '" + dateTimePicker1.Value.Date + "' and Data <= '" + dateTimePicker2.Value.Date + "'";
adgv.DataSource = bindingsource1;
}

标签: c#filterdatatablebindingsourceadvanceddatagrid

解决方案


转换为 datetime应该很容易

过滤器可能是这样的(使用 LinQ):

public static List<DateTime> FilterDatesBetween(List<DateTime> dates, 
DateTime start, DateTime end)
{
    return dates.Where(date => IsDateInPeriod(date, start, end)).
                        OrderBy(date => date).ToList();
}

public static bool IsDateInPeriod(DateTime date, DateTime start, DateTime end)
{
    return (date > start && date < end);
}

推荐阅读