我试图在c#中使用rowfilter将所有列匹配到字符串,但源列(Req Start Date)是datetype。
dvjan.RowFilter = "[Req Start Date]='January'";
我如何转换rowfilter中的类型以获取所有在1月份显示的日期。我需要使用字符串“January'
由于某些原因我无法添加评论,但这是1年
答案 0 :(得分:0)
您必须制作相同格式的比较字符串的两个部分。为此,最好的方法是从字符串中获取数字月份,你可以这样做:
int month = DateTime.ParseExact("January", "MMMM", CultureInfo.CurrentCulture).Month;
DataView实际上并不适用于日期。 (您仍然可以使用带有“#”分隔符的日期,但这是在datatable
上执行的linq版本
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());
}