一个简单的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
}
public class SPCheckboxField : SPFieldText2
{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 FieldRenderingControl14
{15
get16
{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>
<%@ 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 == null) return;
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
}
public class CheckboxFieldControl : BaseFieldControl2
{3
protected TextBox txtUrl;4

5
protected override string DefaultTemplateName6
{7
get8
{9
return "CheckboxFieldControl";10
}11
}12

13
public override object Value14
{15
get16
{17
EnsureChildControls();18
return txtUrl.Text.Trim();19
}20
set21
{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 == null) return;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>
<?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>
<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,蓝色的是陈曦那个。

浙公网安备 33010602011771号