这个字段是一个普通的Single line of text,作用就是显示一个Checkbox,checkbox 的value为这个Text字段的值。
效果图:
下面介绍制作过程:
1. 首先,写一个派生自标准Field Type的类,
2. 写一个UC 命名为CheckboxField.ascx:
3. 写一个对应CheckboxField.ascx 的类:
4. 写一个xml:
fldtypes_CheckboxField.xml注意名字必须以fldtypes_开头.
都是些配置的信息,最主要显示的部分是这里:
效果图:


下面介绍制作过程:
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



3

4

5



6

7

8

9

10



11

12

13

14



15

16



17

18

19

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
>



2



3



4

5

6

7

8

9

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
}

2



3

4

5

6



7

8



9

10

11

12

13

14



15

16



17

18

19

20

21



22

23

24

25

26

27

28



29

30

31

32

33

34



35

36

37

38

39

40

41

42

43

44

45

46

47

48

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
>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

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

2

3

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,蓝色的是陈曦那个。