如何为另外一列添加两列数据,其中这两列是字符串的类型?

时间:2010-05-07 06:57:30

标签: c# winforms datatable datacolumn

我有数据表,有两列是字符串的类型,我想为另一列添加那两列数据,我该怎么办?

我的专栏名称包含特殊字符,我使用“[” “]”来转义特殊字符,我的列是我正在做的十进制类型

 TableExtractedFromFile.Columns[TOT BROK(Rs)].Expression = 
                "'"+"["+SER TAX(Rs)+"]"+"'+'"+"["+STT(Rs)+"]"+"'";

但是TOT BROK(Rs)列包含SER TAX(Rs)和STT(Rs)列的值的比例。但是我想要这两列的值之和。

修改 有用。但是,如果我喜欢有三列A,B和C.现在,如果我table.columns["A"].expression = "A+B+C";那么它会给出错误,如由于表达式中的循环引用而无法设置Expression属性。那么什么是解决方案吗?

2 个答案:

答案 0 :(得分:1)

使用此:

dt.Columns.Add("fullname", typeof(string));
dt.Columns["fullname"].Expression = "lastname + ', ' + firstname";

要添加值(Total,Amount和Surcharge是您现有的列,并且是类型字符串,您需要将CONVERT函数放在列名中,以便它们将被转换为十进制(System.Decimal),如果int使用System .Int32或System.Int64等):

dt.Columns["Total"].Expression = 
  "CONVERT(Amount,System.Decimal) + CONVERT(Surcharge,System.Decimal)";

<强> [编辑]

只需在你的后端执行:

    select *, CONVERT(SERTAX(Rs), DECIMAL) 
        + CONVERT(STT(Rs), DECIMAL) AS brokerage 
    from tbl

如果您在数据库中拥有控制权,请修改SERTAX和STT函数,使其返回decimal / currency / int,而不是字符串。

然后在你的前端,做到这一点:

dt.ColumnChanging += (ds, de) =>
{
    if (de.Column.ColumnName == "Rs")
    {
        decimal serTaxResult = (decimal)new SqlCommand("select SERTAX(" + de.ProposedValue + ")").ExecuteScalar();
        decimal sttResult = (decimal)new SqlCommand("select STT(" + de.ProposedValue + ")").ExecuteScalar();

        // if your SERTAX AND STT really return string, use this:                        
        // decimal serTaxResult = decimal.Parse( (string) new SqlCommand("select SERTAX(" + de.ProposedValue + ")").ExecuteScalar() );
        // decimal sttResult = decimal.Parse( (string) new SqlCommand("select STT(" + de.ProposedValue + ")").ExecuteScalar() );


        de.Row["brokerage"] = serTaxResult + sttResult;
    }
};

<强> [编辑]

如果你的所有列都是字符串类型,你必须用它们自己的CONVERT括起来。

.Expression = string.Format("CONVERT({0},System.String)", 

      "CONVERT(" + serviceTaxClmnInCNote  + ", System.Int32)"
      + " + " 
      + "CONVERT(" + STTClmnInCNote + ", System.Int32)"

      );

如果serviceTax和STT是货币类型,只需将System.Int32更改为System.Decimal。

答案 1 :(得分:0)

从te两列中提取数据并调用字符串concat函数。请参阅以下链接

http://www.1keydata.com/sql/sql-concatenate.html