0

我试图在 c# 中使用 rowfilter 将所有列与字符串匹配,但源列(请求开始日期)是日期类型。

 dvjan.RowFilter = "[Req Start Date]='January'";

我将如何转换 rowfilter 中的类型以显示 1 月的所有日期。我需要使用字符串“January”

由于某种原因,我无法添加评论,但这是 1 年

4

1 回答 1

0

您必须使比较字符串的两个部分具有相同的格式。为此,最好的方法是从字符串中获取数字月份,您可以这样做:

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());
            }
于 2012-12-11T01:00:58.127 回答