我需要使用datepicker1和datepicker2在日期之间过滤ADGV,但是我的代码仅过滤Day,无论其仅在DAYS之间过滤的月份或年份。我试图给我的var值添加消息框:日期为3/1/2018的字符串为01.03.2018 datepicker1为01.05.2019 datepicker2为27.05.2019且过滤器看起来像这样Data> = '01 .05.2019'AND Data <'27 .05.2019 '并且我没有进入列表的第一天,列表从第二天开始(3/2/2018)。我尝试在csv文件中将格式更改为3.1.2018,但这无济于事。
P.S。我正在从.csv文件中获取数据,未使用任何数据库,因此无法使用sql查询。
我尝试用Google搜索它,发现了类似的问题和解决方案,但没有一个像我一样精确,我无法将其用于我的代码,因为我不擅长编程,但是我需要制作“过滤数据” ”程序。
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;
}
答案 0 :(得分:1)
转换为日期时间should be easy。
过滤器可能是这样的(使用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);
}
答案 1 :(得分:1)
尝试一下:
string line;
while ((line = sr.ReadLine()) != null) {
if (!(line.Contains("#"))) {
string[] columns = line.Split(';');
//this two line are to make sure we have date on the field if you sure its date you can just use this: DateTime.Parse(columns[0]).ToString("yyyy-MM-dd");
DateTime dateTry = new DateTime();
DateTime.TryParse(columns[0], out dateTry);
datatable1.Rows.Add(dateTry.ToString("yyyy-MM-dd"), columns[1], columns[2], columns[3]);
}
bindingsource1.DataSource = datatable1;
adgv.DataSource = bindingsource1;