行过滤器转换为字符串

时间:2012-12-11 00:36:53

标签: c# visual-studio-2010

我试图在c#中使用rowfilter将所有列匹配到字符串,但源列(Req Start Date)是datetype。

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

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

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

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());
            }