绑定源过滤器无法正常工作

时间:2019-05-14 06:52:58

标签: c# datatable bindingsource advanceddatagrid

我需要使用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;
}

2 个答案:

答案 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;