我有一个rad网格,示例列为:
<telerik:GridBoundColumn DataField="ApplicantSSN"
DataFormatString="{0:###-##-####}"
HeaderText="SSN/ID Number"
SortExpression="ApplicantSSN"
UniqueName="ApplicantSSN">
</telerik:GridBoundColumn>
网格中的列显示为简单文本,例如123456789
,但是我想像123-45-6789
一样显示此列。
我尝试了DataFormatString="{0:###-##-####}"
,但它不起作用,还尝试了GridMaskedColumn,但不起作用。
您可以使用ItemDataBound事件来处理此问题:
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem dataItem = (GridDataItem)e.Item;
string originalText = dataItem["ApplicationSSN"].Text;
dataItem["ApplicationSSN"].Text = originalText.Substring(0, 3) + "-" + originalText.Substring(3, 2) + "-" + originalText.Substring(5, 4);
}
}
当然,我没有编写任何错误处理来说明SSN长度小于9,但这应该可以使您到达那里。
还有另一种通过使用正则表达式来实现此目的的方法。通过网格ItemDataBound上的方法传递未格式化的SSN。
public static string SsnInjectDashes(string ssn)
{
if (ssn == null)
{
return String.Empty;
}
string value = ssn;
Regex re = new Regex(@"(\d\d\d)(\d\d)(\d\d\d\d)");
if (re.IsMatch(ssn))
{
Match match = re.Match(ssn);
value = match.Groups[1] + "-" + match.Groups[2] + "-" + match.Groups[3];
}
return value;
}