DataFormatString의 사용자 정의 번호 formatinfo
-
12-09-2019 - |
문제
소수점 값에 묶인 바운드 필드가있는 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% 확실하지 않지만 당신이 할 수 있다고 생각하지 않습니다.
템플릿 필드를 사용하고 사용자 정의 포맷터를 사용하여 행위에있는 리터럴에 바인딩해야합니다. 그러나 틀린 것으로 판명되어 기쁩니다 ....