2009-06-15 19 views

Trả lời

7

Theo như tôi biết rằng không có sẵn trong nền tảng chuẩn. Những gì bạn có thể làm mặt khác là để thủ công fieldcontrol của riêng bạn

Vì vậy, trong fieldtypes.xml tùy chỉnh

<FieldTypes> 

    <FieldType> 
    <Field Name="TypeName">MyInteger</Field> 
    <Field Name="ParentType">Integer</Field> 
    ... 
    <Field Name="FieldTypeClass">xxx</Field> 
    </FieldType> 

và trong sitecolumns.xml

<Field ID="xxx" 
     Name="xxx" 
     DisplayName="xxx 
     Description="xxx" 
     Group="xxx 
     Type="MyInteger"  
     DisplaceOnUpgrade="TRUE" 
    /> 

và trong fieldcontrol bạn

public class MyInteger: SPFieldNumber 
{ 
    public MyInteger(SPFieldCollection fields, string fieldName) 
     : base(fields, fieldName) 
    { 
    } 

    public MyInteger(SPFieldCollection fields, string typeName, string displayName) 
     : base(fields, typeName, displayName) 
    { 
    } 


    public override BaseFieldControl FieldRenderingControl 
    { 
     [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)] 
     get 
     { 
      Microsoft.SharePoint.WebControls.BaseFieldControl ctl = 
       new MyIntegerControl(); 
      ctl.FieldName = InternalName; 
      return ctl; 

     } 
    } 

    } 

và trong MyIntegerControl bạn có thể làm bất cứ điều gì bạn muốn (nhiều ghi đè), nhưng là một examp le là:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
    if (this.ControlMode == SPControlMode.New || 
     this.ControlMode == SPControlMode.Display) 
    { 
     // check that use is admin and display value 
    } 
} 
+0

Tôi đồng ý rằng một tùy chỉnh lĩnh vực là con đường để đi. Ví dụ tuyệt vời! –

+0

Tôi cũng vậy, và được trình bày rất rõ ràng! – Colin

0

Bạn cũng có thể làm điều này bằng đăng ký một CustomAction, và thay đổi schema xem danh sách động

 <CustomAction Id="CustomAction" 
      GroupId="SiteActions" 
      Location="Microsoft.SharePoint.StandardMenu" 
      Sequence="1003" 
      ControlAssembly="$SharePoint.Project.AssemblyFullName$" 
     ControlClass="CustomAction.ColumnPermissionAction"/> 

và trong lớp học kiểm soát của bạn:

class ColumnPermissionAction : Control 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     HideColumn(); 
    } 

    private HideColumn(){ 
     WebPart part=//find your web part 
     string colName="SecretColumn"; 
     if(part is ListViewWebPart){ 
      (part as ListViewWebPart).ListViewXml = (part as ListViewWebPart).ListViewXml.Replace(string.Format("<FieldRef Name=\"{0}\"/>", colName), string.Empty); 
     }else if(part is XsltListViewWebPart){ 
      PropertyInfo property = typeof(DataFormWebPart).GetProperty("ListViewXmlDom", BindingFlags.NonPublic | BindingFlags.Instance); 
      if (property != null) 
      { 
       XmlNode xmlView = property.GetValue(part as XsltListViewWebPart, null) as XmlNode; 
       if (xmlView != null) 
       { 
        XmlNode node = xmlView.SelectSingleNode("//ViewFields"); 
        if (node != null) 
        { 
          var field = node.SelectSingleNode(string.Format("FieldRef[@Name='{0}']", colName)); 
          if (field != null) 
          { 
           node.RemoveChild(field); 
          } 
        } 
       } 
      } 
     } 
    } 
} 
Các vấn đề liên quan