想了半天,不知道这个题目怎么写。

那就描述一下:

编写一个自定义字段,这个字段继承于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[i] + ";" + approvesName[i]);
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[i].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();
        }
    }


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

 

 

 

posted on 2010-08-24 08:54  ◎寶☆呗  阅读(868)  评论(2编辑  收藏  举报