问题描述
||
我试图在列表视图上启用“视图”工具栏。但这似乎不起作用。我怎样才能得到正确的代码?
/// <summary>
/// Handles the Click event of the btnEnable control.
/// </summary>
/// <param name=\"sender\">The source of the event.</param>
/// <param name=\"e\">The <see cref=\"System.EventArgs\"/> instance containing the event data.</param>
private void btnEnable_Click(object sender,EventArgs e)
{
using (SPWeb spWeb = new SPSite(tbSiteUrl.Text).OpenWeb())
{
SPList spList = spWeb.Lists[lbLists.SelectedItem.ToString()];
foreach (SPView spView in spList.Views)
{
Enabletoolbar(spView.Title,spList.Title,spWeb.Url);
}
}
}
/// <summary>
/// Enables the toolbar.
/// </summary>
/// <param name=\"viewName\">Name of the view.</param>
/// <param name=\"listName\">Name of the list.</param>
/// <param name=\"webUrl\">The web URL.</param>
private void Enabletoolbar(string viewName,string listName,string webUrl)
{
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (var spSite = new SPSite(webUrl))
{
using (SPWeb web = spSite.OpenWeb())
{
spSite.AllowUnsafeUpdates = true;
SPList spList = web.Lists[listName];
SPView spView = spList.Views[viewName];
XDocument xDocument =
XDocument.Parse(spView.GetViewXml());
XElement xElement =
xDocument.Element(\"View\").Element(\"Toolbar\");
xElement.RemoveAttributes();
xElement.SetAttributeValue(\"Type\",\"Standard\");
xElement.SetAttributeValue(\"ShowAlways\",\"TRUE\");
spView.SetViewXml(xDocument.ToString());
spView.Update();
spSite.AllowUnsafeUpdates = false;
}
}
});
}
更新:
using (var spSite = new SPSite(webUrl))
{
using (SPWeb web = spSite.OpenWeb())
{
spSite.AllowUnsafeUpdates = true;
SPList spList = web.Lists[listName];
SPView spView = spList.Views[viewName];
spView.Toolbar =
@\"<Toolbar Type=\"\"Standard\"\" ShowAlways=\"\"TRUE\"\"/>\";
spView.Update();
spSite.AllowUnsafeUpdates = false;
}
}
更接近,但仍然不好。
这次,它确实修改了视图。我知道这是因为,第二次运行调试器时,我确实注意到SPView.Toolbar属性的值已更改。
但是,当我在SharePoint设计器中打开同一页面时,看不到“ 2”,但看到的默认值为:“ 3”。
除此之外,在浏览器中打开列表视图时,在列表视图页面上看不到工具栏。
解决方法
这是我必须做的才能使其工作。
/// <summary>
/// Enables the toolbar.
/// </summary>
/// <param name=\"viewName\">Name of the view.</param>
/// <param name=\"listName\">Name of the list.</param>
/// <param name=\"webUrl\">The web URL.</param>
private void EnableToolbar(string viewName,string listName,string webUrl)
{
using (var spSite = new SPSite(webUrl))
{
using (SPWeb web = spSite.OpenWeb())
{
spSite.AllowUnsafeUpdates = true;
SPList spList = web.Lists[listName];
SPView spView = spList.Views[viewName];
SPLimitedWebPartManager spLimitedWebPartManager =
web.GetLimitedWebPartManager(spView.Url,PersonalizationScope.Shared);
foreach (WebPart webPart in spLimitedWebPartManager.WebParts)
{
if (webPart.GetType().Name.Equals(\"XsltListViewWebPart\"))
{
try
{
MethodInfo ensureViewMethod = webPart.GetType().GetMethod(\"EnsureView\",BindingFlags.Instance |
BindingFlags.NonPublic);
object[] ensureViewParams = {};
ensureViewMethod.Invoke(webPart,ensureViewParams);
FieldInfo viewFieldInfo = webPart.GetType().GetField(\"view\",BindingFlags.NonPublic |
BindingFlags.Instance);
var view = viewFieldInfo.GetValue(webPart) as SPView;
Type[] toolbarMethodParamTypes = {Type.GetType(\"System.String\")};
MethodInfo setToolbarTypeMethod = view.GetType().GetMethod(\"SetToolbarType\",BindingFlags.Instance |
BindingFlags.NonPublic,null,toolbarMethodParamTypes,null);
object[] setToolbarParam = {\"ShowToolbar\"};
setToolbarTypeMethod.Invoke(view,setToolbarParam);
view.Update();
}
catch { }
}
}
spSite.AllowUnsafeUpdates = false;
}
}
}
,请改用SPView.Toolbar
属性。该属性需要“ 6”个CAML元素,并替换基础CAML片段中的特定XML节点。