我试图在 c# 中使用 rowfilter 将所有列与字符串匹配,但源列(请求开始日期)是日期类型。
dvjan.RowFilter = "[Req Start Date]='January'";
我将如何转换 rowfilter 中的类型以显示 1 月的所有日期。我需要使用字符串“January”
由于某种原因,我无法添加评论,但这是 1 年
我试图在 c# 中使用 rowfilter 将所有列与字符串匹配,但源列(请求开始日期)是日期类型。
dvjan.RowFilter = "[Req Start Date]='January'";
我将如何转换 rowfilter 中的类型以显示 1 月的所有日期。我需要使用字符串“January”
由于某种原因,我无法添加评论,但这是 1 年
您必须使比较字符串的两个部分具有相同的格式。为此,最好的方法是从字符串中获取数字月份,您可以这样做:
int month = DateTime.ParseExact("January", "MMMM", CultureInfo.CurrentCulture).Month;
DataView 并非真正设计用于处理日期。(您仍然可以使用带有“#”分隔符的日期,但这里有一个 linq 版本,在datatable
var dt = new System.Data.DataTable();
dt.Columns.Add("MyDate", typeof(DateTime));
dt.Rows.Add(new DateTime(2011,1,10));
dt.Rows.Add(new DateTime(2011,2,10));
int month = DateTime.ParseExact("January", "MMMM", CultureInfo.CurrentCulture).Month;
var list = dt.AsEnumerable()
.Where(x => x.Field<DateTime>("MyDate").Month == month)
.Select(x => x.Field<DateTime>("MyDate")).ToList();
foreach (var d in list)
{
Console.WriteLine(d);
}
编辑:如果你想使用数据视图,你可以指定上限和下限。像这样:
dt.DefaultView.RowFilter = "[MyDate] > #" + filterDateLower + "# and [MyDate] < #" + filterDateUpper +"#";
完整示例:
var dt = new System.Data.DataTable();
dt.Columns.Add("MyDate", typeof(DateTime));
dt.Rows.Add(new DateTime(2012,1,10));
dt.Rows.Add(new DateTime(2012,2,10));
int month= DateTime.ParseExact("January", "MMMM", CultureInfo.CurrentCulture).Month;
DateTime filterDateLower = new DateTime(DateTime.Now.Year, month, 1);
DateTime filterDateUpper = filterDateLower.AddMonths(1);
dt.DefaultView.RowFilter = "[MyDate] > #" + filterDateLower + "# and [MyDate] < #" + filterDateUpper +"#";
foreach (DataRow d in dt.DefaultView.ToTable().Rows)
{
Console.WriteLine(d["MyDate"].ToString());
}