Как сделать сложение данных двух столбцов для другого столбца, где эти два столбца являются типом строки? - PullRequest
0 голосов
/ 07 мая 2010

У меня есть datatable и есть два столбца, который является типом строки, и я хочу добавить данные этих двух столбцов для другого столбца, как я могу это сделать?

Имя моего столбца содержит специальный символ, и я использовал "[" "]" для экранирования специального символа, и мои столбцы имеют тип десятичной дроби, который я делаю

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

Но столбец TOT BROK (Rs) содержит содержание значений столбцов SER TAX (Rs) и STT (Rs). Но мне нужна сумма значений этих двух столбцов.

EDIT Оно работает. Но если мне нравится, что есть три столбца A, B и C. Теперь, если я делаю I table.columns["A"].expression = "A+B+C";, тогда это выдает ошибку типа Невозможно установить свойство Expression из-за циклической ссылки в выражении. , тогда каково решение того, что ?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Используйте это:

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

Для добавления значения (Total, Amount и Surcharge являются вашими существующими столбцами и являются типом string, вам необходимо поместить функцию CONVERT в имена столбцов, чтобы они были преобразованы в десятичные (System.Decimal), если int использует System .Int32 или System.Int64 и т. Д.):

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

[EDIT]

Просто сделайте это в своем бэкэнде:

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

Если у вас есть контроль в вашей базе данных, измените функции SERTAX и STT, чтобы она могла возвращать десятичную / 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;
    }
};

[EDIT]

Если все ваши столбцы строкового типа, вы должны заключить каждый из них в свои собственные CONVERT.

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

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

      );

Просто измените System.Int32 на System.Decimal, если serviceTax и STT относятся к типу денег.

0 голосов
/ 07 мая 2010

Извлеките данные из двух столбцов и вызовите строковую функцию concat. Обратитесь по следующей ссылке

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

...