DataColumn.Expression属性

       下面的示例在 DataTable 中创建三个列。第二和第三列包含表达式;第二列使用可变税率计算税款,第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。

 1 private void CalcColumns()
 2 {
 3     DataTable table = new DataTable ();
 4  
 5     // Create the first column.
 6     DataColumn priceColumn = new DataColumn();
 7     priceColumn.DataType = System.Type.GetType("System.Decimal");
 8     priceColumn.ColumnName = "price";
 9     priceColumn.DefaultValue = 50;
10      
11     // Create the second, calculated, column.
12     DataColumn taxColumn = new DataColumn();
13     taxColumn.DataType = System.Type.GetType("System.Decimal");
14     taxColumn.ColumnName = "tax";
15     taxColumn.Expression = "price * 0.0862";
16      
17     // Create third column.
18     DataColumn totalColumn = new DataColumn();
19     totalColumn.DataType = System.Type.GetType("System.Decimal");
20     totalColumn.ColumnName = "total";
21     totalColumn.Expression = "price + tax";
22 
23     // Add columns to DataTable.
24     table.Columns.Add(priceColumn);
25     table.Columns.Add(taxColumn);
26     table.Columns.Add(totalColumn);
27 
28     DataRow row = table.NewRow();
29     table.Rows.Add(row);
30     DataView view = new DataView(table);
31     dataGrid1.DataSource = view;
32 }

 

  1.  在创建表达式时,使用 ColumnName 属性来引用列。例如,如果一个列的 ColumnName 是“UnitPrice”,而另一个是“Quantity”,则表达式将是:"UnitPrice * Quantity"。 

  2.  在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'" 

  3.  用户定义的值可以用在将与列值进行比较的表达式内。字符串的值应括在单引号内。日期值应放在磅符号 (#) 内。对于数值,允许使用小数和科学记数法。

      例如:"FirstName = 'John'"     "Price <= 50.00"     "Birthdate < #1/31/82#" 

      对于包含枚举值的列,将值强制转换为整数数据类型。例如:"EnumColumn = 5"

  4. 通配符

      在 LIKE 比较中,* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么这些字符应用中括号([])对其进行转义。如果子句中有中括号,那么中括号字符应用中括号对其进行转义(例如 [[] 或 []])。在模式的开头和结尾,或者在模式的结尾,或在模式的开头,都允许使用通配符。例如:

      "ItemName LIKE '*product*'"

      "ItemName LIKE '*product'"

      "ItemName LIKE 'product*'"

     在字符串的中间不允许使用通配符。例如,不允许 'te*xt'。

  5.  父/子关系引用 

       通过在列名称前面加 Parent,就可以在表达式中引用父表。例如,Parent.Price 引用父表的名为 Price 的列。

       通过在列名称前面加一个 Child,就可以在表达式中引用子表中的列。但是,因为子关系可以返回多行,所以必须在聚合函数中包括对子列的引用。例如,Sum(Child.Price) 将返回子表中名为 Price 的列的总和。

    如果某个表有多个子表,则语法是:Child(RelationName)。例如,如果某个表有两个子表,它们的名称分别为 Customers 和 Orders,并且 DataRelation 对象被命名为Customers2Orders,则引用将为:Avg(Child(Customers2Orders).Quantity)

  6. IsNull 

      例如:myDataColumn.Expression="IsNull(price, -1)"

  7. IIF 

       例如:myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

  8. SubString 

     格式: SUBSTRING(expression, start, length)

     myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

  9. Len 

     myDataColumn.Expression="Len(ItemName)"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你无法使用 DataColumnExpression 属性来转换 DateTime 列,你可以使用 LINQ 查询或循环遍历 DataTable 的行,并将 DateTime 值转换为字符串。 下面是使用 LINQ 查询的示例代码: ```csharp DataTable dataTable = new DataTable(); dataTable.Columns.Add("ID", typeof(int)); dataTable.Columns.Add("Name", typeof(string)); dataTable.Columns.Add("BirthDate", typeof(DateTime)); // 添加示例数据 dataTable.Rows.Add(1, "John", new DateTime(1990, 10, 15)); dataTable.Rows.Add(2, "Jane", new DateTime(1995, 5, 20)); // 将 BirthDate 列转换为字符串 var convertedDataTable = dataTable.Clone(); // 创建一个副本 convertedDataTable.Columns["BirthDate"].DataType = typeof(string); // 修改列的数据类型为字符串 foreach (DataRow row in dataTable.Rows) { var newRow = convertedDataTable.Rows.Add(row.ItemArray); newRow["BirthDate"] = ((DateTime)row["BirthDate"]).ToString("yyyy-MM-dd HH:mm:ss"); } // 导出 convertedDataTable var csvData = string.Join(",", convertedDataTable.Columns.Cast<DataColumn>().Select(column => column.ColumnName)) + "\n"; csvData += string.Join("\n", convertedDataTable.Rows.Cast<DataRow>().Select(row => string.Join(",", row.ItemArray))); // 输出导出的数据 Console.WriteLine(csvData); ``` 在上面的示例中,我们首先创建一个与原始 DataTable 结构相同的副本 convertedDataTable。然后,我们将 "BirthDate" 列的数据类型更改为字符串。接下来,我们遍历原始 DataTable 的每一行,并将 "BirthDate" 列的值转换为字符串,然后将其添加到 convertedDataTable 中。 最后,我们可以通过适当的方式导出 convertedDataTable,这里的示例是将其转换为逗号分隔的字符串。 请注意,这只是一种方法,你可以根据实际情况选择适合的方法来转换 DataTable 中的 DateTime 值为字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值