我有一个绑定到DataTable的DataGridView. DataTable是从数据库查询填充的.该表包含一个名为BestBefore的列. BestBefore是格式化为字符串的日期(SQLite没有日期类型). 我想以编程方式向DataGridView添加
我想以编程方式向DataGridView添加一个名为Status的新列.如果BestBefore小于当前日期,则Status值应设置为OK,否则Status值应设置为NOT OK.
我是Winforms的新手,所以我们非常感谢一些示例代码.
更新:
我认为DataColumn.Expression可以进行简单的计算,例如将列的整数值乘以另一个值,但是如何做我需要做的事情呢?也就是说,计算nowBefore列中now和date(字符串格式化)之间的差异,以确定为新状态列提供的值.示例代码将不胜感激.
将新列添加到DataTable并使用列Expression属性来设置Status表达式.在这里你可以找到很好的例子:DataColumn.Expression
Property
DataTable and DataColumn Expressions in ADO.NET – Calculated Columns
UPDATE
代码示例:
DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("colBestBefore", typeof(DateTime))); dt.Columns.Add(new DataColumn("colStatus", typeof(string))); dt.Columns["colStatus"].Expression = String.Format("IIF(colBestBefore < #{0}#, 'Ok','Not ok')", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); dt.Rows.Add(DateTime.Now.AddDays(-1)); dt.Rows.Add(DateTime.Now.AddDays(1)); dt.Rows.Add(DateTime.Now.AddDays(2)); dt.Rows.Add(DateTime.Now.AddDays(-2)); demoGridView.DataSource = dt;
更新#2
dt.Columns["colStatus"].Expression = String.Format("IIF(CONVERT(colBestBefore, 'System.DateTime') < #{0}#, 'Ok','Not ok')", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));