Modifier ou Ajouter à la liste ListItem dans ApplicationPage avec ListFormWebPart ou DataFormWebPart, mais comment?

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/19617

Question

Je veux faire cette base par programme sur la ListId et ListItemId (pour le montage) ainsi, si je veux utiliser DataFormWebPart je dois régler la XSL propriété en mode conception et je ne sais pas comment atteindre la XSL de la liste cible dans Runtime et modèle d'objet. je peux changer la liste des cibles dans la chaîne de requête, mais l'interface ne va pas changer, car la propriété XSL est pas défini:

    <WebPartPages:DataFormWebPart id="dataForm" runat="server" IsIncluded="True" NoDefaultStyle="TRUE" 
    ViewFlag="8" Title="TestParnian" PageType="PAGE_EDITFORM" ListName="{8965AE3A-CCA0-4502-B7CE-056CD670C016}" Default="FALSE" 
    DisplayName="TestParnian" __markuptype="vsattributemarkup" __WebPartId="{2CDB3F60-D76F-4410-AEDA-28D9D5815854}">
    <DataSources>
        <SharePoint:SPDataSource id="TestParnian2" runat="server" DataSourceMode="ListItem" UseInternalName="true" 
            UseServerDataFormat="True" 
            selectcommand="&lt;View&gt;&lt;Query&gt;&lt;Where&gt;&lt;Eq&gt;&lt;FieldRef Name=&quot;ContentType&quot;/&gt;&lt;Value Type=&quot;Text&quot;&gt;مورد&lt;/Value&gt;&lt;/Eq&gt;&lt;/Where&gt;&lt;/Query&gt;&lt;/View&gt;">
        <SelectParameters>
            <WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId" 
                PropertyName="ParameterValues" DefaultValue="0"/>
            <WebPartPages:DataFormParameter Name="ListID" 
                ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
            <WebPartPages:DataFormParameter Name="MaximumRows" ParameterKey="MaximumRows" PropertyName="ParameterValues" 
                DefaultValue="10"/>
        </SelectParameters>
        <InsertParameters>
            <WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId" 
                PropertyName="ParameterValues" DefaultValue="0"/>
            <WebPartPages:DataFormParameter Name="ListID" 
                ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
        </InsertParameters>
        <UpdateParameters>
            <WebPartPages:DataFormParameter Name="ListItemId" ParameterKey="ListItemId" 
                PropertyName="ParameterValues" DefaultValue="0"/>
            <WebPartPages:DataFormParameter Name="ListID" 
                ParameterKey="ListID" PropertyName="ParameterValues" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
        </UpdateParameters>
        </SharePoint:SPDataSource>
    </DataSources>

    <ParameterBindings>
            <ParameterBinding Name="ListItemId" Location="QueryString(ID)" DefaultValue="0"/>
            <ParameterBinding Name="ListID" Location="QueryString(ListID)" DefaultValue="{8965AE3A-CCA0-4502-B7CE-056CD670C016}"/>
            <ParameterBinding Name="MaximumRows" Location="None" DefaultValue="10"/>
            <ParameterBinding Name="dvt_apos" Location="Postback;Connection"/>
            <ParameterBinding Name="ManualRefresh" Location="WPProperty[ManualRefresh]"/>
            <ParameterBinding Name="UserID" Location="CAMLVariable" DefaultValue="CurrentUserName"/>
            <ParameterBinding Name="Today" Location="CAMLVariable" DefaultValue="CurrentDate"/>
    </ParameterBindings>
        <XSL> The XSL Property that needs to be define. </XSL>
</WebPartPages:DataFormWebPart>

Alors DataFormWebPart ne va pas aider me.the option suivante est ListFormWebPart qui n'a pas besoin de la propriété et peut être XSL créer dans l'exécution avec le modèle d'objet comme ceci:

  int itemId = listItem != null ? int.Parse(listItem.ID.ToString()) : -1;
  ListFormWebPart lstFormList = new ListFormWebPart();

  lstFormList.ListName = lst.ID.ToString("B").ToUpper();
  if (itemId != -1)
  {
     lstFormList.ListItemId = itemId;
     lstFormList.PageType = PAGETYPE.PAGE_EDITFORM;
     lstFormList.ControlMode = SPControlMode.Edit;
     lstFormList.TemplateName = "ListForm";
     lstFormList.FormType = 6;
     lstFormList.Title = "Edit " + lst.Title;
  }
  else
  {
     lstFormList.ControlMode = SPControlMode.New;
     lstFormList.PageType = PAGETYPE.PAGE_NEWFORM;
     lstFormList.TemplateName = "ListForm";
     lstFormList.FormType = 8;
     lstFormList.Title = "Add " + lst.Title;
  }
  lstFormList.ListTitle = lst.Title;
  lstFormList.AllowClose = false;
  lstFormList.AllowConnect = false;
  lstFormList.AllowEdit = false;
  lstFormList.AllowZoneChange = true;
  lstFormList.EnableViewState = true;
  lstFormList.HideIfNoPermissions = true;

  Panel1.Controls.Add(lstFormList);

ce travail de code bien dans webpart mais pas dans ApplicationPage et je dois dire que j'ai ajouté toutes et références qui Namespaces ce besoin WebPart, à la page.
cela me donne cette erreur:

System.NullReferenceException: référence d'objet non définie à une instance d'un objet. à Microsoft.SharePoint.WebPartPages.ListFormWebPart.OnPreRender (EventArgs e) à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Control.PreRenderRecursiveInternal () à System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

je mets et tester ce code dans Page_Init, Page_Load et événements ListFormWebPart_Init mais pas le succès. J'utilise concepteur sharepoint et créer ListFormWebPart puis copier et collé à mon application page et ajouter également l'assemblage nécessaire pour elle, mais aussi pas de succès.
Je ne sais pas quel est le problème, s'il vous plaît donner la bonne approche si le mien est pas.

Était-ce utile?

La solution

Tout d'abord, WebParts OOTB ne sont pas officiellement pris en charge au travail sur les pages d'applications dans SharePoint. Bien sûr 10232 Comme je l'ai de MS officielles a été dit, il pourrait être appris .

Et malgré que webparts dans des pages d'application seront effectivement travailler dans certains cas, il y a beaucoup de problèmes potentiels avec eux. Par exemple, si vous fournissez XslLink à un XSLT-webpart OOTB, comme DFWP, DVWP ou XLV, il va essayer de mettre en cache, et finira par échouer à l'exception « a tenté d'utiliser un objet qui a cessé d'exister ». De plus, les gens ont souvent des problèmes avec la fonctionnalité de ruban standard webparts sur les pages d'application, lorsque certains boutons sont grisés.

Alors, même si vous résoudre votre problème aujourd'hui, vous obtiendrez probablement demain couple.

Alors, au fond, je vous recommande de créer une page de site et placez votre là la fonctionnalité de webparts souhaitée. Et si vous avez besoin d'actions programmatiques supplémentaires, vous pouvez placer votre webpart personnalisé sur la même page et tout ce dont vous avez besoin effectuer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top