一个简单的Checkbox Custom Field Type

这个字段是一个普通的Single line of text,作用就是显示一个Checkbox,checkbox 的value为这个Text字段的值。
效果图:




下面介绍制作过程:

1. 首先,写一个派生自标准Field Type的类,
 1      public   class  SPCheckboxField : SPFieldText
 2      {
 3        public SPCheckboxField(SPFieldCollection fields, string fieldName)
 4            : base(fields, fieldName)
 5        {
 6        }

 7
 8        public SPCheckboxField(Microsoft.SharePoint.SPFieldCollection fields, string typeName, string displayName)
 9            : base(fields, typeName, displayName)
10        {
11        }

12
13        public override Microsoft.SharePoint.WebControls.BaseFieldControl FieldRenderingControl
14        {
15            get
16            {
17                Microsoft.SharePoint.WebControls.BaseFieldControl checkboxFieldControl = new CheckboxFieldControl();
18                checkboxFieldControl.FieldName = InternalName;
19                return checkboxFieldControl;
20            }

21        }

22    }

2. 写一个UC 命名为CheckboxField.ascx:
1 <% @ Control Language="C#" Debug="true"  %>
2 <% @ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"  %>
3 <% @ Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls"  %>
4
5 < SharePoint:RenderingTemplate  ID ="CheckboxFieldControl"  runat ="server" >
6      < Template >
7          < asp:TextBox  ID ="txtUrl"  Enabled ="false"  MaxLength ="255"  runat ="server"  Columns ="50"   />
8      </ Template >
9 </ SharePoint:RenderingTemplate >

3. 写一个对应CheckboxField.ascx 的类:
 1    public   class  CheckboxFieldControl : BaseFieldControl
 2      {
 3        protected TextBox txtUrl;
 4
 5        protected override string DefaultTemplateName
 6        {
 7            get
 8            {
 9                return "CheckboxFieldControl";
10            }

11        }

12
13        public override object Value
14        {
15            get
16            {
17                EnsureChildControls();
18                return txtUrl.Text.Trim();
19            }

20            set
21            {
22                EnsureChildControls();
23                txtUrl.Text = (string)this.ItemFieldValue;
24            }

25        }

26
27        public override void Focus()
28        {
29            EnsureChildControls();
30            txtUrl.Focus();
31        }

32
33        protected override void CreateChildControls()
34        {
35            if (Field == nullreturn;
36           base.CreateChildControls();
37
38            if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.Display)
39                return;
40
41            txtUrl = (TextBox)TemplateContainer.FindControl("txtUrl");
42
43            if (txtUrl == null)
44                throw new ArgumentException("txtUrl is null. Corrupted CheckboxField.ascx file.");
45
46            txtUrl.TabIndex = TabIndex;
47            txtUrl.CssClass = CssClass;
48            txtUrl.ToolTip = Field.Title;
49        }

50    }

4. 写一个xml:
fldtypes_CheckboxField.xml注意名字必须以fldtypes_开头.

 1 <? xml version="1.0" encoding="utf-8" ?>
 2 < FieldTypes >
 3      < FieldType >
 4          < Field  Name ="TypeName" > CheckboxField </ Field >
 5          < Field  Name ="ParentType" > Text </ Field >
 6          < Field  Name ="TypeDisplayName" > Checkbox Field </ Field >
 7          < Field  Name ="TypeShortDescription" > Checkbox Field </ Field >
 8          < Field  Name ="UserCreatable" > TRUE </ Field >
 9          < Field  Name ="ShowInListCreate" > TRUE </ Field >
10          < Field  Name ="ShowInSurveyCreate" > TRUE </ Field >
11          < Field  Name ="ShowInDocumentLibraryCreate" > TRUE </ Field >
12          < Field  Name ="ShowInColumnTemplateCreate" > TRUE </ Field >
13          < Field  Name ="Sortable" > FALSE </ Field >
14          < Field  Name ="AllowBaseTypeRendering" > TRUE </ Field >
15          < Field  Name ="Filterable" > FALSE </ Field >
16          < Field  Name ="FieldTypeClass" > CheckboxCustomField.SPCheckboxField,CheckboxCustomField,Version=1.0.0.0,Culture=neutral,PublicKeyToken=5acbdc949ff711be </ Field >
17          < RenderPattern  Name ="DisplayPattern" >
18              < Switch >
19                  < Expr >
20                      < Column />
21                  </ Expr >
22                  < Case  Value ="" >
23                  </ Case >
24                  < Default >
25                      < HTML > <![CDATA[ <input type='checkbox' name='my_select' value=' ]]> </ HTML >
26                      < Column  HTMLEncode ="TRUE" />
27                      < HTML > <![CDATA[ ' /> ]]> </ HTML >
28                  </ Default >
29              </ Switch >
30          </ RenderPattern >
31      </ FieldType >
32 </ FieldTypes >

   都是些配置的信息,最主要显示的部分是这里:
1                      < HTML > <![CDATA[ <input type='checkbox' name='my_select' value=' ]]> </ HTML >
2                      < Column  HTMLEncode ="TRUE" />
3                      < HTML > <![CDATA[ ' /> ]]> </ HTML >


5. 这样就OK了,开始部署:
    1) 将编译后dll放入GAC
    2) 把UC放到C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/CONTROLTEMPLATES
    3) 把xml放到C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/XML
    4) 重启IIS

在create column会看到我们的Checkbox Field:

红色的就是这个custom field type,蓝色的是陈曦那个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值