zyllf2009 发表于 2015-9-26 12:30:50

Sharepoint 自定义字段(栏) 动态获取数据

  想了半天,不知道这个题目怎么写。
  那就描述一下:
  编写一个自定义字段,这个字段继承于MultiChoices,这个Choices的项是动态的。

  

  1:我们需要编写一个EventHander。这个EventHander是用来将自定义字段的值绑定。直接点就是:给自定义字段赋值咯。
  我们为什么要用自定义字段呢,是因为,我们Sharepoint里面的查阅项DropDownList Value和Text 是相同的值。而我们在使用的时候,需要Value和Text 是不同的值。

  直接贴代码:这是EventHander的主要代码。

  

代码

1public override void ItemAdded(SPItemEventProperties properties) {
2             SPWeb web = properties.OpenWeb();
3             SPList list = web.Lists;
4             SPSite site = web.Site;
5             try {
6               base.ItemAdded(properties);
7               this.DisableEventFiring();
8               SPListItem item = list.GetItemById(properties.ListItemId);
9               web.AllowUnsafeUpdates = true;
10   
11               #region SPFieldChoice
12
13               SPFieldChoice choices = new SPFieldChoice(item.Fields, "下一级审批人");
14               choices.Choices.Clear();
15               SPList km_nodelist = site.RootWeb.Lists["KM_Node"];
16               string F_GUID = properties.ListId.ToString();
17               SPQuery query = new SPQuery();
18               query.Query = "<OrderBy><FieldRef Name='OderNum' />" +
19                     "+</OrderBy><Where><Eq><FieldRef Name='F_GUID'/>" +
20               "<Value Type='Text'>" + F_GUID + "</Value></Eq></Where>";
21               SPListItemCollection lic = km_nodelist.GetItems(query);
22
23               if (lic.Count > 0) {
24                     string approveID = lic["ApproveID"].ToString();
25                     string approveName = lic["ApproveName"].ToString();
26
27                     if (approveID.Contains(";")) {
28                         string[] approves = approveID.Split(';');
29                         string[] approvesName = approveName.Split(';');
30
31                         for (int i = 0; i < approves.Length; i++) {
32 choices.Choices.Add(approves + ";" + approvesName);
33                         }
34                     } else {
35
36                         choices.Choices.Add(approveID + ";" + approveName);
37                     }
38               }
39               choices.Update();
40               #endregion
41               this.EnableEventFiring();
42
43             } catch { } finally {
44               web.Dispose();
45               site.Dispose();
46             }
47         }  

  2:自定义字段
  主要代码:

代码

   public class AppoveManFiledControl : BaseFieldControl {
      private AppoveManFiled field;
      private DropDownList ddlist;
      public AppoveManFiledControl(AppoveManFiled parentField) {
            this.field = parentField;
            this.ddlist = new DropDownList();
      }
      protected override void OnInit(EventArgs e) {
            base.OnInit(e);
      }
      protected override void CreateChildControls() {
            base.CreateChildControls();
            if (this.Field != null && this.ControlMode != SPControlMode.Display) {
                ddlist = new DropDownList();
               if (this.field.Choices.Count != 0) {
                     ddlist.Items.Add(new ListItem());
                  for (int i = 0; i < field.Choices.Count; i++) {
                        string[] valuestr = this.field.Choices.Split(';');
                        ListItem newItem = new ListItem(valuestr, valuestr);
                        ddlist.Items.Add(newItem);
                  }
                }
                this.Controls.Add(ddlist);
            }
      }
      protected override void Render(HtmlTextWriter output) {
            base.Render(output);
      }
      public override object Value {
            get {
                EnsureChildControls();
                if (string.Empty.Equals(ddlist.SelectedValue)) { return null; }
                return ddlist.SelectedValue+","+ddlist.SelectedItem.Text;
            }
            set {
                EnsureChildControls();
                //ddlist.SelectedValue = (string)this.ItemFieldValue;
                ddlist.SelectedValue = this.ItemFieldValue.ToString().Split(',');
            }
      }
      public override void Focus() {
            EnsureChildControls();
            ddlist.Focus();
      }
    }  

  主要实现功能,我们在工作流审批时,需要动态选择下一级审批人,审批人是从工作流流程配置中获取的。
  
  

  
页: [1]
查看完整版本: Sharepoint 自定义字段(栏) 动态获取数据