转:http://www.cnblogs.com/sp007/p/3384310.html

最近有几个朋友问到了有关自定义字段类型的问题,为了让更多的人了解自定义字段类型的方法,特写一篇博客与大家分享,首先看一下解决方案目录

创建自定义类型分以下几个步骤:

第一步:添加SharePoint映射文件夹Xml,在Xml的文件名必须以fldtypes_开头,否则不能识别,为了更好的了解Xml里面的结构我们可以在服务器上打开,看一看系统是如何定义的。

第二步:开始省市定义联动,XML定义

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <FieldTypes>
  3. <FieldType>
  4. <Field Name="TypeName">ProvinceCityArea</Field>
  5. <Field Name="ParentType">Text</Field>
  6. <Field Name="TypeDisplayName">Province City Area</Field>
  7. <Field Name="TypeShortDescription">省市区联动</Field>
  8. <Field Name="UserCreatable">TRUE</Field>
  9. <Field Name="FieldTypeClass">
  10. SharePointProject_Custom_FieldsType_Controls.Controls.ProvinceCityArea,
  11. $SharePoint.Project.AssemblyFullName$
  12. </Field>
  13. </FieldType>
  14. <FieldType>
  15. <Field Name="TypeName">ProvinceCity</Field>
  16. <Field Name="ParentType">Text</Field>
  17. <Field Name="TypeDisplayName">Province City</Field>
  18. <Field Name="TypeShortDescription">省市联动</Field>
  19. <Field Name="UserCreatable">TRUE</Field>
  20. <Field Name="FieldTypeClass">
  21. SharePointProject_Custom_FieldsType_Controls.Controls.ProvinceCity,
  22. $SharePoint.Project.AssemblyFullName$
  23. </Field>
  24. </FieldType>
  25. </FieldTypes>

第三步:创建ProvinceCityControl 类文件,并继承 BaseFieldControl,省市的数据来源是另一张表

代码主要重载 protected override void CreateChildControls()

  1. using System.Web.UI;
  2. using System.Web.UI.WebControls;
  3. using Microsoft.SharePoint;
  4. using Microsoft.SharePoint.WebControls;
  5.  
  6. namespace SharePointProject_Custom_FieldsType_Controls.Controls
  7. {
  8. public class ProvinceCityControl : BaseFieldControl
  9. {
  10. private DropDownList _ddlProvince;
  11. private DropDownList _ddlCity;
  12. private SPWeb _web;
  13. private SPListCollection _listCollection;
  14. private SPList _list;
  15. private SPQuery _query;
  16. private SPListItemCollection _listItemCollection;
  17.  
  18. protected override void CreateChildControls()
  19. {
  20. if (this.ControlMode == SPControlMode.Display)
  21. {
  22. this.Controls.Add(new LiteralControl("" + this.Value));
  23. }
  24. else
  25. {
  26. _ddlProvince = new DropDownList();
  27. _ddlCity = new DropDownList();
  28. using (_web = SPContext.Current.Web)
  29. {
  30. _listCollection = _web.Lists;
  31. _list = _listCollection.TryGetList(Consts.LIST_DICTIONARY);
  32. if (_list != null)
  33. {
  34. #region Province
  35. _query = new SPQuery();
  36. _query.Query = string.Concat(
  37. "<Where>",
  38. "<Eq><FieldRef Name='Group_x003a_Title'/><Value Type='Lookup'>" + Consts.GROUP_PROVINCE + "</Value></Eq>",
  39. "</Where>"
  40. );
  41. _query.ViewFields = string.Concat(
  42. "<FieldRef Name='DictionaryName'/>",
  43. "<FieldRef Name='Title'/>"
  44. );
  45. _listItemCollection = _list.GetItems(_query);
  46. _ddlProvince.AutoPostBack = true;
  47. _ddlProvince.SelectedIndexChanged += new EventHandler(Province_SelectedIndexChanged);
  48. foreach (SPListItem item in _listItemCollection)
  49. {
  50. _ddlProvince.Items.Add(new ListItem(item["DictionaryName"].ToString(), item["Title"].ToString()));
  51. }
  52. #endregion
  53.  
  54. #region City
  55. LoadCity();
  56. #endregion
  57.  
  58. }
  59.  
  60. }
  61. this.Controls.Add(_ddlProvince);
  62. this.Controls.Add(new LiteralControl("-"));
  63. this.Controls.Add(_ddlCity);
  64. }
  65. }
  66.  
  67. #region Province of autoPostBack
  68. void Province_SelectedIndexChanged(object sender,EventArgs e)
  69. {
  70. LoadCity();
  71. }
  72. #endregion
  73.  
  74. #region Load City
  75. void LoadCity()
  76. {
  77. _ddlCity.Items.Clear();
  78. _query = new SPQuery();
  79. _query.Query = string.Concat(
  80. "<Where><And>",
  81. "<Eq><FieldRef Name='Group_x003a_Title'/><Value Type='Lookup'>" + Consts.GROUP_CITY + "</Value></Eq>",
  82. "<BeginsWith><FieldRef Name='Title'/><Value Type='Text'>" + _ddlProvince.SelectedValue.ToString() + "</Value></BeginsWith>",
  83. "</And></Where>"
  84. );
  85. _listItemCollection = _list.GetItems(_query);
  86. foreach (SPListItem item in _listItemCollection)
  87. {
  88. _ddlCity.Items.Add(new ListItem(item["DictionaryName"].ToString(), item["Title"].ToString()));
  89. }
  90. }
  91. #endregion
  92.  
  93. public override object Value
  94. {
  95. get
  96. {
  97. return base.Value;
  98. }
  99. set
  100. {
  101. base.Value = value;
  102. }
  103. }
  104. }
  105. }

第四步:再创建一个类ProvinceCity ,并继承SPFieldText

  1. using Microsoft.SharePoint;
  2. using Microsoft.SharePoint.WebControls;
  3.  
  4. namespace SharePointProject_Custom_FieldsType_Controls.Controls
  5. {
  6. public class ProvinceCity:SPFieldText
  7. {
  8. public ProvinceCity(SPFieldCollection fields, string fieldName) : base(fields, fieldName) { }
  9. public ProvinceCity(SPFieldCollection fields, string fieldType, string displayName) : base(fields, fieldType, displayName) { }
  10.  
  11. public override BaseFieldControl FieldRenderingControl
  12. {
  13. get
  14. {
  15. BaseFieldControl fc = new ProvinceCityControl();
  16. fc.FieldName = this.InternalName;
  17. return fc;
  18. }
  19. }
  20. }
  21. }

如果要设置默认值请Override DefaultValue,如果要验证格式是否正确 请Override GetValidatedString  

第五步:部署查看效果

第六步:创建栏查看效果

就这么简单,完成了,快来试吧。

SharePoint 2010 自定义 字段 类型--------省市区联动的更多相关文章

  1. 转载:SharePoint 2010 自定义 字段 类型--------省市区联动

    最近有几个朋友问到了有关自定义字段类型的问题,为了让更多的人了解自定义字段类型的方法,特写一篇博客与大家分享,首先看一下解决方案目录 创建自定义类型分以下几个步骤: 第一步:添加SharePoint映 ...

  2. [SharePoint 2010] 自定义字段类型开发(二)

    在SharePoint 2010中实现View Action Button效果. http://www.sharepointblogs.be/blogs/vandest/archive/2008/06 ...

  3. sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)

    接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...

  4. 开发MOSS自定义字段类型

    前段时间,由于刚好项目定制的需要,笔者就开发了几个自定义字段类型.在这抽空做个详细笔记,方便初学者学习.这方面的资料也很多,如果自身觉得不大明白可以参考下SDK和网上的相关文章.本章的目的主要是给新手 ...

  5. sharepoint2010问卷调查(2)-实现问卷的图片调查(采用自定义字段类型)

    1. 首先建立个图片库上传图片 并建立文件夹1和2,1下有1.1文件夹,2下2.1文件夹,2.1下有文件夹2.1.1. 在1文件夹下放如下图片: 2.建立自定义字段类型,如下图: 3.部署后建立栏目的 ...

  6. SharePoint 2010 ——自定义上传页面与多文件上传解决方案

    最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...

  7. sharepoint 2010自定义访问日志列表设置移动终端否和客户端访问系统等计算列的公式

    上个月本人开发和上线了一个在SharePoint 2010上基于HTML5的移动OA网站,后端服务采用自定义的基于AgilePoint工作流引擎的Sharepoint Web服务,前端主要采用Jque ...

  8. SharePoint 2010自定义母版页小技巧——JavaScript和CSS引用

    通常在我们的项目中,都会涉及到母版页的定制.并且必不可少的,需要配合以一套自己的JavaScript框架和CSS样式.你有没有遇到过这样的情况呢,在开发环境和UAT时都还算顺利,但是当最终部署到生产服 ...

  9. sharepoint 自定义字段实现省市联动

    最后实现效果如下:设置栏如下:解决方案结构如下: fldtypes_RoyCustomField.xml 内容如下: <?xml version="1.0" encoding ...

随机推荐

  1. JQuery的鼠标滚动事件

    jQuery(window).height()代表了当前可见区域的大小,而jQuery(document).height()则代表了整个文档的高度,可视具体情况使用. 注意当浏览器窗口大小改变时(如最 ...

  2. 【CSS】盒模型+选择器(你选择的要操作的对象)

    盒模型 转http://www.cnblogs.com/cchyao/archive/2010/07/12/1775846.html 1.w3c标准的盒模型和ie的盒模型主要差别在于content的w ...

  3. SelectList

    SelectList 构造函数 (IEnumerable, String, String, Object) 使用列表的指定项.数据值字段.数据文本字段和选定的值来初始化 SelectList 类的新实 ...

  4. 【BZOJ 1834】 [ZJOI2010]network 网络扩容

    Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的 ...

  5. Vue引发的getter和setter

    Vue引发的getter和setter 公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我 ...

  6. Window8 进不了PE如何设置BIOS

    如题,如今进入Win8时代,很多新出的机器都自带了WIN8.但是童鞋们想进PE进行操作的时候,发现进不了. 更改BIOS以下2处设置,即可使用第三方引导安装系统:Boot->Launch CSM ...

  7. CSRF之攻击与防御

    0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...

  8. Google 面经 09/26

    http://www.mitbbs.com/article_t/JobHunting/32539885.html 狗家面经发信站: BBS 未名空间站 (Thu Sep 26 01:20:54 201 ...

  9. _CrtIsValidPointer 问题

    从微软站点: 检查指针有效性下面的示例使用 _CrtIsValidPointer 验证给定的内存范围对于读或写是否有效. _ASSERTE(_CrtIsValidPointer( address, s ...

  10. ANDROID_MARS学习笔记_S01_004dpi、dp(dip)及计算

    一.dpi.dp介绍 sp会随着用户在手机中设置字体大小而改变,而dp不会 二.1.dpsp_layout.xml <?xml version="1.0" encoding= ...