2012-03-05 4 views
1

저는 TemplateField를 사용하여 데이터베이스의 테이블에 바인딩 된 gridview에 추가 "계산 된"열을 추가하고 있습니다. 이 이상한 오류가 발생하고 디버깅을 시작하는 방법에 대한 단서가 없습니다. 나는 <%# 문법으로 잘못되었거나 무언가를하고있을 수도 있습니다. 그렇다면 알려주십시오. 나는 그것을 완전히 이해하지 못한다.<% # - 이상한 오류가 발생했습니다.

코드 :

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:Label runat="server" Text='<%# Math.Round(decimal.Parse((((int.Parse(Eval("Num1").ToString())) * 36)/(235 * int.Parse(Eval("Num2").ToString()))).ToString()), 0); %>'></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

오류 : CS1525 : 잘못된 표현 용어 ','

가 쉼표입니다 ...하지만 Math.Round의 두 번째 인수합니다. 아니면 이런 식으로 할 수없는 일을하고 있습니까? 또한 Math.Round 행은 코드 숨김의 오류를 나타내지 않습니다 (내 괄호는 좋을 것임).

+0

세미콜론을 제거하십시오. 그리고 시도해보십시오 – PraveenVenu

+0

괜찮아 보였습니다. 이것은 상당히 혼란스러운 텍스트 줄처럼 보입니다. Num1과 Num2가 계산되고 있다면 아마도이 값을 계산하는 것이 더 나을 것입니다. 이렇게하면 '% # Eval ("ComputedValue") %>' – Narnian

+0

이라고 말할 수 있습니다. @Narnian Num1과 Num2는 Gridview가 바인딩 된 데이터베이스의 테이블에있는 열입니다. – novacara

답변

1

괜찮아 보였습니다. 그러나 이것은 상당히 혼란스러운 텍스트 줄처럼 보입니다. Num1과 Num2가 데이터베이스의 열이라면 테이블을 나타내는 클래스에 속성을 추가하기 만하면됩니다.

Num1과 Num2가 정의 된 위치 옆에 데이터베이스의 열을 나타내는 것이 아니라 데이터베이스의 값 계산을 나타내는 다른 속성을 정의하십시오.

이렇게하면 특정 페이지에서 계산이 제거되므로 어딘가에 다시 사용해야 할 경우 계산할 수 있습니다.

또는, 당신은 재사용이 가능하기 때문에

<%# GetComputedValue((int)Eval("Num1"), (int)Eval("Num2")) %> 

protected string GetComputedValue(int num1, int num2) 

내가하지만, 더 나은 속성 생각처럼 ... 뒤에 코드를하는 방법을 참조 할 수 있습니다.

+0

감사합니다. 실제로 복잡한 if 문이어야하는 다른 열이 있으므로 코드 숨김 메서드가 모든면에서 더 잘 작동합니다. 다시 한 번 감사드립니다! – novacara

6

데이터 바인드 식에서는 단일 문으로 제한됩니다. ";"을 버리십시오. 나는 성명 자체가 잘 형성되어 있다고 믿을 것이다.

+0

나는 ';'을 얻는다. 예상 – novacara

+0

미래에 누군가를 참조 할 수 있도록 ';' 왜냐하면 레이블에 들어가기 때문에 ToString()이 필요했기 때문입니다.가장 유용한 오류는 아닙니다. – novacara

2

반올림을 수행하는 기능이 필요하다면 Round라는 코드 뒤에 공개 함수를 만들고 데이터 바인딩 식에서 해당 함수를 호출하면됩니다. 그렇게하면 쉼표로 문제가 발생하지 않고 모든 논리를 한 곳에 모으기 때문에 나중에 일관성을 유지하는 것이 더 쉽습니다.

+0

좋은 아이디어! 그러나 코드 숨김의 메서드에서 데이터 바인딩 된 변수에 액세스하는 방법이 있습니까? 위의 Num1과 Num2의 "Eval"입니다. – novacara

관련 문제