如何在TimeSpan值上过滤DataColumn?

时间:2010-09-16 23:20:43

标签: datatable timespan rowfilter

使用C#.NET编程。我有一个DataTable,其列名为Time,类型为System.TimeSpan。当我在DataGridView中显示DataTable时,我想过滤掉所有没有列出时间的条目。我尝试了以下但无济于事。你能帮忙吗?

DataView myDataView = new DataView(SomeDataTable);
myDataView.RowFilter += "Time >= 1";  // doesn't work
myDataView.RowFilter += "Time >= #00:00:01#";  // doesn't work
myDataView.RowFilter += "Time <> ''";  // doesn't work
myDataView.RowFilter += "Time <> ''";  // doesn't work

2 个答案:

答案 0 :(得分:0)

我发现了......

myDataView.RowFilter = "Convert(Time, System.String) <> ''";

答案 1 :(得分:0)

如果有人碰到这个烦人的问题,很遗憾没有很好的解决办法。 它接缝过滤 DataTableSystem.TimeSpan 不起作用。 我使用的解决方案是将 SQL 中列的类型从 NVARCHAR(8)(或其他)更改为 Time(0),然后您可以像这样对其应用逻辑:

StringBuilder builder = new();

// IsNull() is my own string extension
if (!ExecutionTimeFrom.IsNull())
{
    builder.Append($"AND TimeStamp >= '{ExecutionTimeFrom}' ");
}
if (!ExecutionTimeTo.IsNull())
{
    builder.Append($"AND TimeStamp <= '{ExecutionTimeTo}' ");
}

之后将 sql 表中的字符串从 hh:mm:ss (10:32:15) 转换回 System.TimeSpan 就像:

bool isTimeSpan = TimeSpan.TryParse(TimeFromSql, out TimeSpan time);

这两天我一直在纠结这个问题,希望能帮到你:)