|
想了半天,不知道这个题目怎么写。
那就描述一下:
编写一个自定义字段,这个字段继承于MultiChoices,这个Choices的项是动态的。
1:我们需要编写一个EventHander。这个EventHander是用来将自定义字段的值绑定。直接点就是:给自定义字段赋值咯。
我们为什么要用自定义字段呢,是因为,我们Sharepoint里面的查阅项DropDownList Value和Text 是相同的值。而我们在使用的时候,需要Value和Text 是不同的值。
直接贴代码:这是EventHander的主要代码。
代码
1 public override void ItemAdded(SPItemEventProperties properties) {
2 SPWeb web = properties.OpenWeb();
3 SPList list = web.Lists[properties.ListId];
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[0]["ApproveID"].ToString();
25 string approveName = lic[0]["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[1], valuestr[0]);
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(',')[0];
}
}
public override void Focus() {
EnsureChildControls();
ddlist.Focus();
}
}
主要实现功能,我们在工作流审批时,需要动态选择下一级审批人,审批人是从工作流流程配置中获取的。
|
|
|