以编程方式在XsltListViewWebPart上显示添加新项

时间:2012-09-05 11:25:02

标签: c# sharepoint sharepoint-2010

我正在尝试在现有的XlstListviewwebpart上显示Add New Item链接。但是下面的代码不起作用。我在这里找到了这个:http://suryapulipati.blogspot.be/2011/08/sharepoint-2010-show-add-new-item-or.html

但是toolbarnode始终为null enter image description here

private void ShowAddOrganisationLinkOnHomePage(string webUrl)
        {
            Logger.LogDebug("NLSponsoringSiteConfigSponsoringCentralEventReceiver", "ConfigureOrganisationDashboard(SPWeb currentWeb)", "BEGIN");           
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPFile pageOrganisation = null;
                using (SPWeb oHomeWeb = new SPSite(webUrl).OpenWeb())
                {
                    try
                    {                       
                        pageOrganisation = oHomeWeb.GetFile("default.aspx");
                        pageOrganisation.CheckOut();
                        string idWebPartRootOrganisation = "ID_RootOrganisation";
                        oHomeWeb.AllowUnsafeUpdates = true;
                        using (SPLimitedWebPartManager mgrPageManager = pageOrganisation.GetLimitedWebPartManager(PersonalizationScope.Shared))
                        {
                            SPList organisations = oHomeWeb.GetSafeListByName(SponsoringCommon.Constants.LISTNAMES_ORGANISATIONS2);
                            XsltListViewWebPart lvwpOrganisation = mgrPageManager.WebParts[idWebPartRootOrganisation] as XsltListViewWebPart;
                            SPView oCustomView = organisations.Views[SponsoringCommon.Constants.VIEWS_ORGANISATION_DASHBOARD_NAME];

                            PropertyInfo nodeProp = oCustomView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance);
                            XmlNode node = nodeProp.GetValue(oCustomView, null) as XmlNode;
                            XmlNode toolbarNode = node.SelectSingleNode("Toolbar");
                            if (toolbarNode != null)
                            {
                                if (!toolbarNode.Attributes["Type"].Value.Equals("Freeform"))
                                {
                                    toolbarNode.Attributes["Type"].Value = "Freeform";
                                }
                            }
                            oCustomView.Update();
                            mgrPageManager.SaveChanges(lvwpOrganisation);                          
                        }
                    }
                    catch (Exception)
                    {
                        oHomeWeb.AllowUnsafeUpdates = false;
                        if (pageOrganisation != null) pageOrganisation.UndoCheckOut();
                        throw;
                    }
                    finally
                    {
                        pageOrganisation.CheckIn(string.Empty);
                        oHomeWeb.AllowUnsafeUpdates = false;
                    }                       
                }
            });
        }

1 个答案:

答案 0 :(得分:2)

我确实喜欢这个:

using (SPLimitedWebPartManager mgrPageManager = pageOrganisation.GetLimitedWebPartManager(PersonalizationScope.Shared))
                        {
                            SPList organisations = oHomeWeb.GetSafeListByName(SponsoringCommon.Constants.LISTNAMES_ORGANISATIONS2);
                            XsltListViewWebPart lvwpOrganisation = mgrPageManager.WebParts[idWebPartRootOrganisation] as XsltListViewWebPart;
                            Functions.SetToolbarType(lvwpOrganisation, "Freeform");

                            mgrPageManager.SaveChanges(lvwpOrganisation);                          
                        }


 public static void SetToolbarType(XsltListViewWebPart lvwp, string viewType)
        {
            try
            {
                MethodInfo ensureViewMethod = lvwp.GetType().GetMethod("EnsureView", BindingFlags.Instance | BindingFlags.NonPublic);
                object[] ensureViewParams = { };
                ensureViewMethod.Invoke(lvwp, ensureViewParams);
                FieldInfo viewFieldInfo = lvwp.GetType().GetField("view", BindingFlags.NonPublic | BindingFlags.Instance);
                SPView view = viewFieldInfo.GetValue(lvwp) as SPView;
                Type[] toolbarMethodParamTypes = { Type.GetType("System.String") };
                MethodInfo setToolbarTypeMethod = view.GetType().GetMethod("SetToolbarType", BindingFlags.Instance | BindingFlags.NonPublic, null, toolbarMethodParamTypes, null);
                object[] setToolbarParam = { viewType }; //set the type here
                setToolbarTypeMethod.Invoke(view, setToolbarParam);
                view.Update();
            }
            catch { }
        }