MOSS2007的自定义字段类型是一个非常有用的功能,但在网上相关的实例介绍很少,所以下面就
一步一步地介绍怎样来创建一个自定义字段类型,我们的目标是:实现一个具有可配置性的下拉列表框,
其选择项目是读取XML文件获得。
实现一个自定义字段类型主要需要完成三种文件的编制:1)定义类型的XML文件;2)定义展现模板
*.ascx文件;3)定义后台代码程序集。
这里因为我们想要实现一个可读取XML文件的下拉列表框,所以我们首先还要定义一个配置文件
SelectItemFromXMLConfig.xml。
XML代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4b776ff91ca44e8e401fadf579fcd6b4.png)
<?
xml version="1.0" encoding="utf-8"
?>
![](https://i-blog.csdnimg.cn/blog_migrate/f9f6491743d5e5c81a3e1ae0bfc92aff.png)
<
SelectItems
>
![](https://i-blog.csdnimg.cn/blog_migrate/6d0124f57d54b6fa405ced53709fa85c.png)
<
Item
>
选项一
</
Item
>
![](https://i-blog.csdnimg.cn/blog_migrate/39636e10d3c67b3e7ba38ef2c0e1bbc6.png)
<
Item
>
选项二
</
Item
>
![](https://i-blog.csdnimg.cn/blog_migrate/bc4b3c4bdf051e553f12cdd0268b4263.png)
<
Item
>
选项三
</
Item
>
![](https://i-blog.csdnimg.cn/blog_migrate/2c4f912fcf71fbe0b3577b5bce4b5852.png)
<
Item
>
选项四
</
Item
>
![](https://i-blog.csdnimg.cn/blog_migrate/ab97d2ab8e8dc7963652d75ddcac4c1e.png)
<
Item
>
选项五
</
Item
>
![](https://i-blog.csdnimg.cn/blog_migrate/da86e4a9a33bea6b1633cca444aa20f8.png)
</
SelectItems
>
然后,我们可以打开Visual Studio2005,然后添加一个类库,如果你已经安装了扩展模板也可以直接选择
创建“Field Control”类型的项目。建议下载微软的SharePoint工具包:Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions.
这里我们新建一个名叫SelectItemFromXMLField的类库,其中包含两个类文件:SelectItemFromXML.Field.cs
和SelectItemFromXML.FieldControl.cs。
SelectItemFromXML.Field.cs完整代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/da86e4a9a33bea6b1633cca444aa20f8.png)
using
System;
![](https://i-blog.csdnimg.cn/blog_migrate/3bb688365081fe61774b345a0c360d71.png)
using
System.Runtime.InteropServices;
![](https://i-blog.csdnimg.cn/blog_migrate/4926cd230ae30933c2998b9dc933e9cb.png)
using
System.Security.Permissions;
![](https://i-blog.csdnimg.cn/blog_migrate/e25df32a2c7d6825146d1ad60138baa0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2c4f912fcf71fbe0b3577b5bce4b5852.png)
using
Microsoft.SharePoint;
![](https://i-blog.csdnimg.cn/blog_migrate/ab97d2ab8e8dc7963652d75ddcac4c1e.png)
using
Microsoft.SharePoint.WebControls;
![](https://i-blog.csdnimg.cn/blog_migrate/1f365f16bfeacd84e24f94a724afaa5e.png)
using
Microsoft.SharePoint.Security;
![](https://i-blog.csdnimg.cn/blog_migrate/188560059662b9c28fe8761e4ecf3c55.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc4b3c4bdf051e553f12cdd0268b4263.png)
namespace
SelectItemFromXML
![](https://i-blog.csdnimg.cn/blog_migrate/c2d94d758536d6e80dd78252e6ff23e8.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b05953610c41f4afe29b4492d2a2ed43.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cb6649f91e4085bb7fe16633524f532c.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/9014447f4721df36a78ae641f1fd7579.gif)
[CLSCompliant(
false
)]
![](https://i-blog.csdnimg.cn/blog_migrate/9014447f4721df36a78ae641f1fd7579.gif)
[Guid(
"
92f76873-537c-4c13-abaf-2d47bdc7e2be
"
)]
![](https://i-blog.csdnimg.cn/blog_migrate/f6db835b51ff99a120872c3027e4e6db.gif)
public
class
SelectItemFromXMLField : SPFieldChoice
![](https://i-blog.csdnimg.cn/blog_migrate/27e9fad75449e7edb5f1c996ae346aa6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/2e72bad3ef416e129904a7b7912b0bb4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/079f211287b9471b61387bfb097e17ea.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/ff79704f67618d80984b91c11803f263.gif)
public
SelectItemFromXMLField(SPFieldCollection fields,
string
fieldName)
![](https://i-blog.csdnimg.cn/blog_migrate/2709b5a2687781608928dd0d1ad82cee.gif)
:
base
(fields, fieldName)
![](https://i-blog.csdnimg.cn/blog_migrate/b2128baef0700e08f965ccacbfc6f254.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f272c27d6c7de596c3f06432b7e5dcb0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/892b775f06471c6bc27cdf02494d3925.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/d5b09cc1898a36c565a8705d93a19a5f.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/551b16f9ea9b6e196e7abe00010db11e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bc6425b0cbd4491d682ca6a3dab78377.gif)
public
SelectItemFromXMLField(SPFieldCollection fields,
string
typeName,
string
displayName)
![](https://i-blog.csdnimg.cn/blog_migrate/8c8e7bffb8e2d05452f70fc0b6ce63c3.gif)
:
base
(fields, typeName, displayName)
![](https://i-blog.csdnimg.cn/blog_migrate/fe7a2c073705234245fb39233b7928be.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6ecba58f5cd19863bb22a09317c5966a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b65c8d26b4d781bd74b394b4ff8e3a02.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/ddb66703f8e26239e4abaff18c4df2ee.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/8dcd2b8868b712fdddc08d4d3b041d2b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/db5f40239dadf90e76c9e93d2db8d139.gif)
public
override
BaseFieldControl FieldRenderingControl
![](https://i-blog.csdnimg.cn/blog_migrate/52e07fedad072aeffd31f0717799539d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/ef857f9b4181c5106c4cecb14872c1eb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/29865556d0e7a888b9ddfdd5eb3adf09.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/ee5afa623e11fc93e5134debfb4cde8f.gif)
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel
=
true
)]
![](https://i-blog.csdnimg.cn/blog_migrate/0018ec2835ebd535f0e555f630154005.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/eaeb972f1cbd57b35d57e66cbe190433.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a78042f7f4cadce94514dc577ab2f162.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/23c049864585590aeb13b459a9c5fc6b.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/d0efdbe183d4a1a521b830a43ad8f6d2.gif)
BaseFieldControl fieldControl
=
new
SelectItemFromXMLFieldControl();
![](https://i-blog.csdnimg.cn/blog_migrate/d0efdbe183d4a1a521b830a43ad8f6d2.gif)
fieldControl.FieldName
=
this
.InternalName;
![](https://i-blog.csdnimg.cn/blog_migrate/6e3d3a429482cdf3a5fe63faab4eb4b4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/48a0dc28539f0fcdbf4718f2002b7833.gif)
return
fieldControl;
![](https://i-blog.csdnimg.cn/blog_migrate/170367b54a5f675df9401ae02279b85e.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/92a77d5510c32c02766855069ee2cbc6.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/46bb0322a60fb81606f4ceae5082cb3a.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/1cf3c4a9933cf6c14accc465390a5367.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7a5276114418a9c4eef21b3271b40ce3.png)
SelectItemFromXML.FieldControl.cs完整代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/1f365f16bfeacd84e24f94a724afaa5e.png)
using
System;
![](https://i-blog.csdnimg.cn/blog_migrate/309002c7096a8b40ae56800ca054d6b2.png)
using
System.Runtime.InteropServices;
![](https://i-blog.csdnimg.cn/blog_migrate/7a5276114418a9c4eef21b3271b40ce3.png)
using
System.Web;
![](https://i-blog.csdnimg.cn/blog_migrate/2877e4f478a6c608c8bda165bf594cb2.png)
using
Microsoft.SharePoint;
![](https://i-blog.csdnimg.cn/blog_migrate/855c7786b53ef1dd2852eeb6b65611d6.png)
using
Microsoft.SharePoint.WebControls;
![](https://i-blog.csdnimg.cn/blog_migrate/06db6b2fb7524d0ee3c84d63dbea9c4c.png)
using
System.Web.UI.WebControls;
![](https://i-blog.csdnimg.cn/blog_migrate/07f079ca15a4e50c69813d6d710170f8.png)
using
System.IO;
![](https://i-blog.csdnimg.cn/blog_migrate/50b20c4f1909e14dec1009436e693762.png)
using
System.Xml;
![](https://i-blog.csdnimg.cn/blog_migrate/b20a9006d32204f39009946dc23694ff.png)
using
System.Diagnostics;
![](https://i-blog.csdnimg.cn/blog_migrate/e25df32a2c7d6825146d1ad60138baa0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4926cd230ae30933c2998b9dc933e9cb.png)
namespace
SelectItemFromXML
![](https://i-blog.csdnimg.cn/blog_migrate/262499c69a9ebc3c1769f0cd590a7955.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/027985fe60335d27dbd3468998de744f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/823e1aa94dd801db668d300c986c1418.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/4427da1503fa7d2e674cc29184ad55e3.gif)
[CLSCompliant(
false
)]
![](https://i-blog.csdnimg.cn/blog_migrate/46f1cf4b571b74b9ee6a2d19539576c6.gif)
[Guid(
"
eb269bd9-0d3e-4aa2-b88f-37fbccb0d7d8
"
)]
![](https://i-blog.csdnimg.cn/blog_migrate/cfcbd0ec27a11f100323acf703c5728e.gif)
public
class
SelectItemFromXMLFieldControl : BaseFieldControl
![](https://i-blog.csdnimg.cn/blog_migrate/a2e99556c1489e64b2c818b8d2f24729.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f02f49db556c83329d8cc507dd38c99.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/9d93dc2501fd557c8784299535446649.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/576ef90dfcf06547cabe7dbb703a82ec.gif)
protected
DropDownList cboList;
![](https://i-blog.csdnimg.cn/blog_migrate/e07eb179219304c0824416d761d2fd8b.gif)
protected
override
string
DefaultTemplateName
![](https://i-blog.csdnimg.cn/blog_migrate/e86db81544b1665bc99c06e63aeae11e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/aa19e92050bc8efa03227ac48ff02a96.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bfa32ba6329a4cfb04d9ca009e452ca2.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/5bd80fa50b491fcb4149f917db3d2a42.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/f722498156b4e21aef840d7ab71a6ed2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f02f49db556c83329d8cc507dd38c99.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/bfa32ba6329a4cfb04d9ca009e452ca2.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/b1ae3eb823d8d02f1644e46212142d43.gif)
return
"
SelectItemFromXMLFieldControl
"
;
![](https://i-blog.csdnimg.cn/blog_migrate/1048c4e0353e5292aadfb390d771f05e.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/e89b3df62385dfb2bf0b3052d5d045bb.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/fbe83c865755f82f4726651d01194552.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/fbe83c865755f82f4726651d01194552.gif)
public
override
object
Value
![](https://i-blog.csdnimg.cn/blog_migrate/029749cfd138d8438f5e77a380d25b9c.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/882d68a011df05b2e0203a7bb876b698.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/282a659b9e53684c7256242aaa91c028.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/a8fb6edb4878a96005980d79b9b93040.gif)
get
![](https://i-blog.csdnimg.cn/blog_migrate/1b9a42e9e817464ada0451d7be6c86f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b15fca0c188fed680368017d5c9e3745.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/fdf0e2df8af44be34bf3a2bdc7de3a4a.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/cd0db123dcdc795a0acd605192af3fdd.gif)
EnsureChildControls();
![](https://i-blog.csdnimg.cn/blog_migrate/4deaf090a781d7326183acf5df52446e.gif)
return
cboList.SelectedValue.ToString();
![](https://i-blog.csdnimg.cn/blog_migrate/483b9ef1707a61e7e2446a0f1ea14ed3.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/67e74e7810fa5fe6f9ff55bba9a24c26.gif)
set
![](https://i-blog.csdnimg.cn/blog_migrate/bf0cb1a5e90c7a00786c3727682827a2.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a2ff4e82e97ab11f6c37016b668ed093.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/67a7c00709800d492c57e43b53bbbbe3.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/9bd99c02c7ce8865ee681283ca34db50.gif)
EnsureChildControls();
![](https://i-blog.csdnimg.cn/blog_migrate/7d931af3e1d1b4041926369c7c1d7f4e.gif)
cboList.SelectedValue
=
(
string
)
this
.ItemFieldValue;
![](https://i-blog.csdnimg.cn/blog_migrate/1048c4e0353e5292aadfb390d771f05e.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/7bb22073eeccb0c5c9c532c23192ae9c.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/30ee6d968890081b2867f070ae587610.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/fcade383f573a83748bfcb28efc49ab2.gif)
public
override
void
Focus()
![](https://i-blog.csdnimg.cn/blog_migrate/b687c8d713aa2e42be7e4d7920cc6151.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a385de71b676a940bad5f09a3760e0cb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c1c8651074c36c61da520f7e0e10f7cd.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/a42c0f1fb60664e9e8df5a3f9c2b5458.gif)
EnsureChildControls();
![](https://i-blog.csdnimg.cn/blog_migrate/65d026f1a29de5ac477fd9cdeb420bd3.gif)
cboList.Focus();
![](https://i-blog.csdnimg.cn/blog_migrate/7bb22073eeccb0c5c9c532c23192ae9c.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/cda46aa32d9fc989810f0858f28bdcfd.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/cd0db123dcdc795a0acd605192af3fdd.gif)
protected
override
void
CreateChildControls()
![](https://i-blog.csdnimg.cn/blog_migrate/27585fe2797d70c517bed7d538cb6a6d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b0a6ca7494132bab928fac9e93de3338.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/609d157a626027820344e225ccbaa046.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/2b3f226896ff4f5a15520db66af371c6.gif)
if
(Field
==
null
)
return
;
![](https://i-blog.csdnimg.cn/blog_migrate/6b6412bef7fe53f991c58560be14d2c5.gif)
base
.CreateChildControls();
![](https://i-blog.csdnimg.cn/blog_migrate/b96969801e5b2c2e995c8fc5502d8112.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5d9ece079643425fd3f50d1974be3078.gif)
if
(ControlMode
==
Microsoft.SharePoint.WebControls.SPControlMode.Display)
![](https://i-blog.csdnimg.cn/blog_migrate/4d681241350f46aeee68c9f6661b9364.gif)
return
;
![](https://i-blog.csdnimg.cn/blog_migrate/13f23401110b2a9021645e4c5d8f25d0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d4ab3314142bff647c98b1b39430da0a.gif)
cboList
=
(DropDownList)TemplateContainer.FindControl(
"
cboList
"
);
![](https://i-blog.csdnimg.cn/blog_migrate/e76086adfff23451b1eeebf02b1c8dfb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5865f92fa3b0149271d929e7a84cb417.gif)
if
(cboList
==
null
)
![](https://i-blog.csdnimg.cn/blog_migrate/e649f8c0d02d98603e482bf4277fdbeb.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d4560c3145f88c03d98d35ab8228f0f1.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6e77adc37b0db1d5999e3282cf3337c8.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/1e8040bc2121f5f32351e984b06a0add.gif)
throw
new
ArgumentException(
"
cboList is null. Corrupted SelectItemFromXMLFieldControl.ascx file.
"
);
![](https://i-blog.csdnimg.cn/blog_migrate/4c43a73a3e6f6d83e8288ec9ce0a9624.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/a0c29bd4a13221ed1416a7d334bec021.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f5cce4844b9dae391bff92ee82523fbf.gif)
if
(
!
Page.IsPostBack)
![](https://i-blog.csdnimg.cn/blog_migrate/16d37a167d3723e6a54d396ff452ac47.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/d8fb3873f4d547183e7e08966ed21b5d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1d841ed2698a029a7f13be5cf3a7e63f.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/4c7a09deefe38c381f4dc2e7ffa1ac8d.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/2f71cc2e7412a36a36898f1806020b6f.gif)
string
configFile
=
Environment.CurrentDirectory
+
"
//SelectItemFromXMLConfig.xml
"
;
![](https://i-blog.csdnimg.cn/blog_migrate/0dd88b5049a9cb567ed39a88d15b4916.gif)
if
(
!
File.Exists(configFile))
![](https://i-blog.csdnimg.cn/blog_migrate/262471258585c16f1daabba7e4a446a6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/520e6ff34797d10b982c5c9bf830ca22.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/07eb0c1eae9a23f75e443f01e8779e83.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/b52abc88aa1065c930d3c53cc486c3f2.gif)
cboList.Items.Add(
new
ListItem(
"
Config file not found!
"
,
"
Error
"
));
![](https://i-blog.csdnimg.cn/blog_migrate/2349435ebe76af5ce25001af73b14ed4.gif)
cboList.ToolTip
=
configFile
+
"
not found!
"
;
![](https://i-blog.csdnimg.cn/blog_migrate/b4373752a8f0ffbc53e471b3a3dfa378.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/f9a49f521141200dc986a849cfc7e237.gif)
else
![](https://i-blog.csdnimg.cn/blog_migrate/198fd34ca769c4214980ddc1c69298f6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7404c6e67f12df7d51e9ee78bfd3a45e.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/99a35dcc011dc302153f9b00b0cb5b03.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/733a9ca89ba45fcbe71f1216618d6bad.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6501c189463e778e4a07b34693e9db97.gif)
XmlDocument xmlDoc
=
new
XmlDocument();
![](https://i-blog.csdnimg.cn/blog_migrate/d87a534232bcf30877e2a1f8764aac51.gif)
xmlDoc.Load(configFile);
![](https://i-blog.csdnimg.cn/blog_migrate/44f7e2e7abc8ff50ddaf4dac3e42548f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/66c2516f1110dee148f4e76b7023c979.gif)
XmlNodeList nodelist
=
xmlDoc.DocumentElement.ChildNodes;
![](https://i-blog.csdnimg.cn/blog_migrate/d953cb7ec3b491c1c39b52943bb79d10.gif)
foreach
(XmlNode node
in
nodelist)
![](https://i-blog.csdnimg.cn/blog_migrate/072368997dd49295e16fc85c0e2d5f76.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/60b22bf13d79aeb0b0ea0fcc5bab5ac3.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4d31ebcf468d321eb3248fdf10aeb7ae.gif)
{
![](https://i-blog.csdnimg.cn/blog_migrate/ab838987f22990d1f3c42a7b37d7a6a2.gif)
cboList.Items.Add(
new
ListItem(node.InnerText, node.InnerText));
![](https://i-blog.csdnimg.cn/blog_migrate/dca4503059c20524349836c06db97817.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/39310e72e8a2c7438fddc38f82d7ce93.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/47595eb8eda6bc0e6a324c0d05f4d8fd.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c4fd4c55ad5cceab0287bd0b3168f488.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/70d0ed386ecf1662e4b94d1a895977b7.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/394b1bc199761b93cf69a55c6e83ff7c.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/0bb8c8804a91e41345b456d8e1d5d275.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5fd0b4313be4eceee10e5ae16430f4e5.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/e4465f5f7640badcb7785d1f31fa339a.gif)
}
如果你使用模板创建项目,则上面的代码大部分会被自动生成。
值得注意的几个地方是:
1)SelectItemFromXMLField类将继承SPFieldChoice基类,并重写FieldRenderingControl方法。
2)SelectItemFromXMLFieldControl 类将继承BaseFieldControl基类。
3)CreateChildControls方法中读取XML配置文件,并把选项绑定到下拉列表框(DropDownList)子控件上。
4)上面代码中使用了Environment.CurrentDirectory语句,后面部署时要把配置文件放到
代码编写完成之后,要对程序集进行强名称设置,并编译。
接下来,我们来制作展现模板。你可以在当前解决方案中添加一个文本文件“SelectItemFromXMLFieldControl.ascx”。
然后打该文件编写代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a5469a0bb31ab2701a6588ebcf1c6a2b.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/01d36857d30fe88f493ce7af6f1b3ca6.gif)
<%
![](https://i-blog.csdnimg.cn/blog_migrate/59474cbc079e730b08d77613dacf2051.gif)
@ Control Language
=
"
C#
"
Debug
=
"
true
"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/f1d7afaa2f04207ef98a15a300eec3dd.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/5d506d9dfc24e9733c126ed99201e114.gif)
<%
![](https://i-blog.csdnimg.cn/blog_migrate/a454689db455e02abdfc4ce6f75888db.gif)
@ Assembly Name
=
"
Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/11dc47a0cb2d73e4a746b814ca40afa6.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/c60f9eb33660c51e9bffd77dc2133c69.gif)
<%
![](https://i-blog.csdnimg.cn/blog_migrate/f14659689772dd53666c2f013f6ee1e2.gif)
@ Register TagPrefix
=
"
SharePoint
"
Assembly
=
"
Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c
"
Namespace
=
"
Microsoft.SharePoint.WebControls
"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/3896e0574bdf02e84b54696c55f8c275.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5564d7d620775d9b6e6abb1f05919f1e.png)
<
SharePoint:RenderingTemplate
ID
="SelectItemFromXMLFieldControl"
runat
="server"
>
![](https://i-blog.csdnimg.cn/blog_migrate/d4191eb0641a623aa87e9d694a34f42a.png)
<
Template
>
![](https://i-blog.csdnimg.cn/blog_migrate/87aa7f9507c567c212a67e7634dba545.png)
<
asp:DropDownList
runat
="server"
ID
="cboList"
/>
![](https://i-blog.csdnimg.cn/blog_migrate/a176b25ad4421738efd1961fa01be407.png)
</
Template
>
![](https://i-blog.csdnimg.cn/blog_migrate/841816197d6c7184b4e9afe534db8193.png)
</
SharePoint:RenderingTemplate
>
值得注意的地方是:上面代码中DropDownList的ID是"cboList",这个名字曾经被后台类SelectItemFromXMLFieldControl使用
TemplateContainer.FindControl方法寻找过,所以不要写错。
OK,最后,我们可以在当前解决方案中添加一个XML文件“FLDTYPES_SelectItemFromXmlField.xml”。
代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/bef0b53f0e18269b1686c208750c6088.png)
<?
xml version="1.0" encoding="utf-8"
?>
![](https://i-blog.csdnimg.cn/blog_migrate/8478021eee55d1eb04a0af63ffcf0250.png)
<
FieldTypes
>
![](https://i-blog.csdnimg.cn/blog_migrate/64e49447cb0a58708623b292bbf6444d.png)
<
FieldType
>
![](https://i-blog.csdnimg.cn/blog_migrate/eafd9950b44c25d4ab26a2cdbe1c66d2.png)
<
Field
Name
="TypeName"
>
SelectItemFromXML
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/687e432a56456be79b73e90921ee11ac.png)
<
Field
Name
="ParentType"
>
Choice
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/8b61a8e55ff3e67c3f609ae649a45167.png)
<
Field
Name
="TypeDisplayName"
>
Select Item From XML
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/ae0a92d29fe54a4ce09fd298fe24be40.png)
<
Field
Name
="TypeShortDescription"
>
Select Item From XML
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/a0598c9721cd1b40915a904a1824677b.png)
<
Field
Name
="UserCreatable"
>
TRUE
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/b103ae94e82437297594498a44140c21.png)
<
Field
Name
="ShowInListCreate"
>
TRUE
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/3bcc33dc73672ef0bcf0e9fb954fd623.png)
<
Field
Name
="ShowInSurveyCreate"
>
TRUE
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/d702fe0a86b0225f3cf8b0d3ac207069.png)
<
Field
Name
="ShowInDocumentLibraryCreate"
>
TRUE
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/00e8bcce23eeafb92a4849ae3484988a.png)
<
Field
Name
="ShowInColumnTemplateCreate"
>
TRUE
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/79c1027844d5a939f8dd25196a3e46f3.png)
<
Field
Name
="FieldTypeClass"
>
SelectItemFromXML.SelectItemFromXMLField,SelectItemFromXMLField, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ad167643f06d0c9c
</
Field
>
![](https://i-blog.csdnimg.cn/blog_migrate/81ca8f2c85e2bc8bc4b0a320d9f712f4.png)
</
FieldType
>
![](https://i-blog.csdnimg.cn/blog_migrate/8384badf9b71b0282ddb72c1c02b190f.png)
</
FieldTypes
>
值得注意的地方是:
1)该定义文件的文件名一定要以“FLDTYPES”开头。
2)FieldTypeClass项中的值是类的全名称和程序集的全名称,可以使用Reflector获得。
到这里,我们需要编写的所有文件都已经编写完成了,只要做简单的部署就可以了。
步骤如下:
1)把强名称编译好的SelectItemFromXMLField程序集加入到GAC。
2)把类型定义文件FLDTYPES_SelectItemFromXmlField.xml拷贝到c:/program.../12/TEMPLATE/XML目录下。
3)把模板文件SelectItemFromXMLFieldControl.ascx拷贝到c:/program.../12/TEMPLATE/CONTROLTEMPLATES目录下。
4)重启动IIS。(可以使用命令行iisreset)
5)把该控件的配置文件SelectItemFromXMLConfig.xml拷贝到C:/Windows/System32/inetsrv目录下。
值得注意的地方是:
前四步是部署自定义字段类型的一般步骤。第五步是针对这个实例的特殊步骤。你其实可以把配置文件放在你想放的任何位置,只要在前面编写SelectItemFromXMLFieldControl类的CreateChildControls方法时指定你想放的位置即可。
OK,到此自定义字段类型的过程已经结束。你可以在创建MOSS的某个列表栏时,发现一个新的类型“Select Item From XML”。选择该类型创建一个新栏后,当往该列表中添加项目时,会发现添加页面中对应新栏的输入方式是一个下拉列表框,其中的选项就是我们在XML配置文件中定义的选项了!