2010-05-07 3 views
0

나는 datatable을 가지고 있으며 문자열의 유형 인 두 개의 열이 있는데 그 두 열의 데이터를 다른 열에 추가하고 싶습니다. 어떻게 할 수 있습니까?두 개의 열이 문자열 형식 인 다른 열에 대해 두 개의 열 데이터를 추가하는 방법은 무엇입니까?

내 열 이름은 특수 문자를 포함하고 나는 을 사용했다 "[""]" 특수 문자를 이스케이프에 내 열이 나는

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

을 수행하고, 소수의 종류 그러나 열 TOT하기 Brok 있습니다 (Rs)에는 SER TAX (Rs) 및 STT (Rs) 열의 값의 상충이 들어 있습니다. 그러나이 두 열의 값의 합이 필요합니다.

편집 작동합니다. 하지만 내가 좋아하는 경우 A, B, C의 3 개의 열이 있습니다. 이제 table.columns["A"].expression = "A+B+C";을 입력하면 과 같은 오류가 발생합니다. 표현식에서 순환 참조로 인해 Expression 속성을 설정할 수 없습니다. 그런 다음 그 해결책은 무엇입니까?

+0

입니다 참조하십시오? btw, DataTable에 관해서는, 그것은 Sql Server의 기능 중 일부를 모방했지만 Sql Server (또는 그 문제에 대해서는 RDBMS) 기능/기능과 관련이 없습니다. DataTable 기능은 기본 데이터베이스와 아무런 관련이 없습니다. 데이터베이스에도 내장 함수 SERTAX가 있지만 열의 표현식에서는 여전히 작동하지 않습니다. –

+0

Oracle 또는 Postgres를 사용하는 경우 DataTable Column의 Expression 기능이 데이터베이스 기능과 아무런 관련이 없음을 증명하려면 다음을 수행하십시오.'dt.Columns [ "Fullname"].Expression = "Lastname || ','|| Firstname"', 이것은 작동하지 않을 것입니다. 여러분은 여전히'|| '대신에'+'를 사용해야합니다. –

+0

마지막 오류 (표현식을 순환 할 수 없습니다 ..)), 당신은 그런 종류의 일을 할 수 없습니다. 마치 Excel의 B2 열에 수식이 있고 B2 + C2 수식이 아닌 것입니다. 할 수있는 일은 DataTable의 DataRow를 반복하는 것입니다. 'A "] = r ["A "] + r ["B "] + r ["c "]; ' –

답변

1

사용이 :

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

(총, 금액 및 추가 요금은 그들이에 캐스트 할 수 있도록 당신이 당신의 열 이름에 CONVERT 기능을 둘 필요, 기존의 열이며, 입력 문자열입니다 값의 추가에 대한 진수 (System.Decimal), INT 사용 선택 System.Int32 또는 System.Int64 등)의 경우 :

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

[편집]

그냥 할 백엔드에서 그것은 : 당신이 당신의 데이터베이스에서 제어 할 경우 소수점/통화/INT가 아닌 문자열을 반환 할 수 있습니다

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

의 SERTAX 및 STT 기능을 수정합니다.

그런 다음 프런트 엔드에서 다음을 수행하십시오

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; 
    } 
}; 

[편집]

모든 열이 문자열 유형 인 경우, 당신이 가지고 자신의 개종자로 각각 동봉.

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

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

    ); 

serviceTax 및 STT가 money 유형 인 경우 System.Int32를 System.Decimal로 변경하십시오.

+0

@Michael Buen, 이것은 두 문자열을 추가하거나 연결합니까? – Harikrishna

+0

필드가 문자열이면 연결됩니다. 두 숫자가 모두 숫자 인 경우, 추가로 –

+0

@ Micheal이 발생합니다.이 두 열은 int가 아닌 문자열 유형이며 데이터가 삽입되면 데이터 유형을 변경할 수없는 오류가 발생하기 때문에 int 유형이 아닌 데이터 유형을 변경할 수 없습니다. – Harikrishna