使用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
答案 0 :(得分:0)
我发现了......
myDataView.RowFilter = "Convert(Time, System.String) <> ''";
答案 1 :(得分:0)
如果有人碰到这个烦人的问题,很遗憾没有很好的解决办法。
它接缝过滤 DataTable
与 System.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);
这两天我一直在纠结这个问题,希望能帮到你:)