Sharepoint - 自定义整数列 - 删除EditForm中的千位分隔符

时间:2010-12-17 11:37:45

标签: sharepoint-2010 integer

我在Sharepoint 2010中创建了一个类型为integer的新列定义,并将Commas设置为false。 内容类型使用此列。 当我根据内容类型创建列表时,“查看项目”表单将正确显示该字段:2010。 然而,EditForm会将其显示为2,010:使用逗号,但逗号设置为false。

这是一个新的整数字段(不是转换为整数的数字字段)

如何在EditForm中将2,010显示为2010?

 <Field
  ID="{FF3B3FA8-AF33-4691-AD7E-1463DC024B99}"
  Name="studyYear"
  StaticName="studyYear"
  DisplayName="Study year"
  Title="Year"
  Description="Study year"
  Required="FALSE"
  Group="Custom Columns"
  Type="Integer"
  Commas="FALSE"
  Min="1900"
  Max="2300"
  MaxLength="4">
 </Field>

2 个答案:

答案 0 :(得分:1)

我想根据“创建”字段按年份对列表项进行分组,但需要将数字转换为文本以避免1000个分隔符(,)

所以我创建了一个计算字段,其公式为= LEFT(YEAR(Created),1)&amp; RIGHT(YEAR(Created),3)

答案 1 :(得分:0)

我有一个我在SharePoint 2010中创建的自定义字段定义。

我基本上遵循了in this MS walkthrough.所提出的模式 - 然后我将自定义的“字段”示例更改为继承自SPFieldNumber的“SPFieldText”,而我的FieldControl继承自NumberField。

另外,这是我的字段定义XML:

<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
  <FieldType>
    <Field Name="TypeName">Wps</Field>
    <Field Name="SQLType">int</Field>
    <Field Name="InternalType">Integer</Field>
    <Field Name="ParentType">Number</Field>
    <Field Name="TypeDisplayName">Client WPS integer</Field>
    <Field Name="TypeShortDescription">Client WPS number</Field>
    <Field Name="UserCreatable">TRUE</Field>
    <Field Name="ShowOnListCreate">TRUE</Field>
    <Field Name="ShowOnSurveyCreate">TRUE</Field>
    <Field Name="ShowOnDocumentLibraryCreate">TRUE</Field>
    <Field Name="ShowOnColumnTemplateCreate">TRUE</Field>
    <Field Name="FieldTypeClass">MyCompany.SharePoint.WpsField, $SharePoint.Project.AssemblyFullName$</Field>
  </FieldType>
</FieldTypes>

就像Karel一样,我已经很好地定义了一切,所有逗号都被压扁了......除了编辑表格。

我最后在自定义.ascx中添加了一些javascript,这是自定义字段定义的一部分。

 <%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
    <%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
    <%@ Import Namespace="Microsoft.SharePoint" %> 
    <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Control Language="VB" %>
    <SharePoint:RenderingTemplate ID="WpsFieldControl" runat="server">
      <Template>
        <span id="commaField">
<asp:TextBox ID="TextField" runat="server"  Width="120px" />
        </span>
        <script type="text/javascript">// <![CDATA[
            var numFld = document.getElementById("commaField").childNodes[0];
            numFld.value = numFld.value.replace(",", "");
          // ]]>
        </script>
      </Template>
    </SharePoint:RenderingTemplate>

请注意,我将ASP.NET TextBox包装在一个带有ID的简单SPAN中,我可以使用JS中的getElementById轻松找到该字段。这在我的场景中是可以接受的,因为我们的业务性质在给定的SharePoint列表记录中只需要我的字段类型的单个实例。

这似乎解决了我的一切!也许不是最漂亮的,但是,我喜欢我不必用计算列阻塞我的列表定义。