문제

소수점 값에 묶인 바운드 필드가있는 asp.net gridview가 있습니다. 다음 코드를 사용하여 소수점 번호를 통화 값으로 형식화합니다.

DataFormatString="{0:C}"

그러나 NumberFormatInfo의 사용자 정의 구현을 보유하고 있으며, 이는 통화 기호를 제거하고 수천 개의 Seperator를 수정합니다. 일반적 으로이 형식은 다음과 같이 적용됩니다.

myDecimal.ToString("C", myCustomNFI);

GridView의 Boundfield 요소에 사용자 정의 NumberFormatInfo를 어떻게 지정합니까?

감사

도움이 되었습니까?

해결책

이것은 사용자 정의 바운드 필드를 사용하여 수행 할 수 있습니다. Custom Boundfield 클래스로 시작하십시오. 아래에서 나는 당신의 이름 지정 컨벤션을 따르려고했습니다.

namespace CustomBoundField
{
    public class NFIBoundField : System.Web.UI.WebControls.BoundField
    {
        protected override string FormatDataValue(object dataValue, bool encode)
        {
            if (dataValue == null || dataValue == System.DBNull.Value)
                return "";

            if (base.DataFormatString == string.Empty)
                return dataValue.ToString();

            // Format as you wish based on dataValue and DataFormatString argument
            return string.Format("{0}", dataValue);
        }
    }
}

.aspx 파일에 컨트롤을 등록하십시오.

<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>

GridView 내부의 Custom Boundfield를 참조하십시오.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <custom:NFIBoundField  DataField="Price" HeaderText="Price" DataFormatString="{0:NFI}"/>
    </Columns>
</asp:GridView>

원하는 형식을 얻으려면 FormatdataValue () 내부에서 플레이하고 싶을 것입니다.

몇 가지 의견 :

  • Custom Boundfield가 여러 형식을 처리하려면 Base.DataFormatString을 구문 분석하여 서식 유형을 얻으십시오. 다시 말해, 코드 프론트에서 {0 : nfi} 또는 {0 : nfi2}를 제공하면 형식 내에서 수용 할 경우 다른 형식이 생길 수 있습니다.

  • FormatdataValue 함수 내부에 모든 형식의 로직을 바로 배치하는 대신 자신만의 형식 공급자를 작성하는 것을 고려할 수 있습니다.

이 접근법은 당신에게 잘 작동해야합니다. 행운을 빌어 요.

다른 팁

함께 시도하십시오 field.dataformatstring = CurrencySymbol + "{0 :#, ###. ##}";

그것은 나를 위해 잘 작동합니다.

나는 100% 확실하지 않지만 당신이 할 수 있다고 생각하지 않습니다.

템플릿 필드를 사용하고 사용자 정의 포맷터를 사용하여 행위에있는 리터럴에 바인딩해야합니다. 그러나 틀린 것으로 판명되어 기쁩니다 ....

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top