我有一个绑定(bind)到DataTable的DataGridView。 DataTable是从数据库查询中填充的。该表包含名为BestBefore的列。 BestBefore是一个格式为字符串的日期(SQLite没有日期类型)。
我想以编程方式向DataGridView添加一个名为Status的新列。如果BestBefore小于当前日期,则应将状态值设置为OK,否则应将状态值设置为NOT OK。
我是Winforms的新手,所以将非常感谢您提供一些示例代码。
更新:
我认为DataColumn.Expression可以进行简单的计算,例如将列的整数值乘以另一个值,但是该怎么做呢?也就是说,计算现在与BestBefore列中的日期(字符串格式)之间的差,以确定要赋予新状态列的值。示例代码将不胜感激。
最佳答案
将新列添加到DataTable
并使用列Expression
属性设置状态表达式。
在这里您可以找到一个很好的例子: DataColumn.Expression
Property
DataTable and DataColumn Expressions in ADO.NET - Calculated Columns
更新
代码示例:
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"));
关于c# - 以编程方式将新列添加到DataGridView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5524075/