2012-06-08 2 views
0

Я создал настраиваемое поле в и пустом проекте sharepoint, и я переопределил FieldRenderingControl, поэтому я могу создать свой собственный макет таблицы, когда отображается элемент в списке.Custom FieldRenderingControl Sharepoint 2010

Проблема, с которой я столкнулась, заключается в том, что ItemFieldValue в классе управления визуализацией всегда имеет значение null.

Как получить полевое значение поля, которое я пытаюсь отобразить?

Это мой Настраиваемое поле Класс

namespace CustomFieldDefinitions.Fields 
{ 
    public class AttributeField : SPField 
    { 
     #region Constructors 

     /// <summary> 
     /// This is a constuctor with two parameters. 
     /// </summary> 
     /// <param name="fields"></param> 
     /// <param name="fieldName"></param> 
     public AttributeField(SPFieldCollection fields, string fieldName) 
      : base(fields, fieldName) 
     { 
     } 

     /// <summary> 
     /// This is a contructor with three parameters. 
     /// </summary> 
     /// <param name="fields"></param> 
     /// <param name="typeName"></param> 
     /// <param name="displayName"></param> 
     public AttributeField(SPFieldCollection fields, string typeName, string displayName) 
      : base(fields, typeName, displayName) 
     { 
     } 

     #endregion 

     #region Overridden Properties 

     /// <summary> 
     /// This ties the control used to support this field with the current implementation of it. 
     /// </summary> 
     public override BaseFieldControl FieldRenderingControl 
     { 
      [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)] 
      get 
      { 
       BaseFieldControl fieldControl = new AttributeFieldControl(); 
       fieldControl.FieldName = this.InternalName; 
       return fieldControl; 
      } 
     } 


     public override object GetFieldValue(string value) 
     { 
      return base.GetFieldValue(value); 
     } 

     #endregion 

    } 
} 

И мой FieldRenderingControl Класс

namespace CustomFieldDefinitions.FieldControls 
{ 
    public class AttributeFieldControl : BaseFieldControl 
    { 
     protected Label AttributeValueForDisplay; 
     protected TextBox AttributeValueTextbox; 

     public override string DisplayTemplateName 
     { 
      get 
      { 
       return "AttributeFieldDisplayControl"; 
      } 
      set 
      { 
       base.DisplayTemplateName = value; 
      } 
     } 

     protected override string DefaultTemplateName 
     { 
      get 
      { 
       if (this.ControlMode == SPControlMode.Display) 
       { 
        return this.DisplayTemplateName; 
       } 
       else 
       { 
        return "AttributeFieldControl"; 
       } 
      } 
     } 

     protected override void CreateChildControls() 
     { 
      if (this.Field != null) 
      { 
       base.CreateChildControls(); 

       this.AttributeValueForDisplay = (Label)TemplateContainer.FindControl("lblAttValue"); 
       this.AttributeValueTextbox = (TextBox)TemplateContainer.FindControl("txtAttValue"); 

       if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit) 
       { 
        AttributeValueTextbox.Text = Convert.ToString(this.ListItemFieldValue); 
       } 
       else 
       { 
        AttributeValueForDisplay.Text = Convert.ToString(this.ListItemFieldValue); 
       } 
      } 
     } 
    } 
} 

И наконец, Markup

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> 
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %> 
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Control Language="C#" %> 
<SharePoint:RenderingTemplate ID="AttributeFieldDisplayControl" runat="server"> 
    <Template> 
     <asp:Label ID="lblAttValue" runat="server" BorderColor="Red"></asp:Label> 
    </Template> 
</SharePoint:RenderingTemplate> 
<SharePoint:RenderingTemplate ID="AttributeFieldControl" runat="server"> 
    <Template> 
     <asp:TextBox ID="txtAttValue" runat="server" BorderColor="Red"></asp:TextBox> 
    </Template> 
</SharePoint:RenderingTemplate> 
+0

Можем ли мы увидеть разметку/код, который вы использовали для этого? –

+0

Спасибо, что посмотрели. Я разместил код и разметку. В классе FieldRenderingControl он в настоящее время читает ListItemFieldValue, потому что я пытаюсь использовать каждое свойство, но изначально я начал с ItemFieldValue. – Maxmanzero

+0

После публикации этого я сделал несколько вещей, чтобы попытаться заставить его работать правильно. Я жестко закодировал данные, которые должны появиться в этом поле, чтобы убедиться, что есть значение, которое будет передано на дисплей, редактировать и новые виды. Я также загрузил несколько примеров, которые работают и сравнивают их с моими собственными, и все выглядит по порядку. Я просто не понимаю, почему значение в представлении списка не передается в окно модального окна. – Maxmanzero

ответ

1

Пожалуйста Прилагаю ответ на этот вопрос. Я гигантский придурок. Когда был вызван метод ReadItem моего BdcModel, я не устанавливал свойство AttributeValue объекта, который передавался на экранную страницу.

Итак, однажды я добавил, что все работает нормально. Спасибо всем, кто смотрел этот пост. Прошу прощения, что я потратил ваше время.