背景:
在sharepoint designer里面添加checkbox非常的不方便,另添加只有某个组里面的人才可以修改。
分析:
1,用treeview在弹出窗口内显示所有的item。
2,窗口还要随着内容的增加而放大。
实现:
1, 实现把所有的内容添加到treeview:
public void GetListItems(SPList myList, SPFolder myFolder, TreeNode myNode)
{
if (myFolder != myList.RootFolder)
{
myNode.CollapseAll();
}
else
{
myNode.ExpandAll();
}
myNode.Text = myFolder.Name;
myNode.ImageUrl = "~/_layouts/images/folder.gif";
SPQuery myQuery = new SPQuery();
if (myFolder.SubFolders.Count != 0)
{
myQuery.Folder = myFolder;
foreach (SPListItem myItem in myList.GetItems(myQuery))
{
TreeNode myItemNode = new TreeNode();
if (myItem.ContentType.Name != "Folder")
{
myItemNode.Text = myItem.Name;
myItemNode.Value = myItem.ID.ToString();
}
else
{
GetListItems(myList, myItem.Folder, myItemNode);
}
myNode.ChildNodes.Add(myItemNode);
}
}
else
{
myQuery.Folder = myFolder;
foreach (SPListItem myItem in myList.GetItems(myQuery))
{
TreeNode myItemNode = new TreeNode();
myItemNode.Text = myItem.Name;
myItemNode.Value = myItem.ID.ToString();
myNode.ChildNodes.Add(myItemNode);
}
}
}
2, 判断当前用户是否在group里面:
// check the user if in the group
myGroup = myWeb.Groups[strGroupName];
if (!(myGroup.ContainsCurrentUser || myWeb.CurrentUser.IsSiteAdmin))
{
ButtonSubmit.Enabled = false;
LabelMessage.Text = "You not allow to update owner , please contact your administrator. ";
}
3, 当点OK按钮后,查找选中的item,并更新:
private void ProcessNode(TreeNode ParentNode)
{
if (ParentNode.Checked)
{
int NodeKey = 0;
if (int.TryParse(ParentNode.Value, out NodeKey))
{
NodeKey = int.Parse(ParentNode.Value);
UpdateItemById(NodeKey);
}
foreach (TreeNode ChildNode in ParentNode.ChildNodes)
{
ProcessNode(ChildNode);
}
}
else
{
foreach (TreeNode ChildNode in ParentNode.ChildNodes)
{
ProcessNode(ChildNode);
}
}
}
private void UpdateItemById(int ID)
{
try
{
if (ID != 0)
{
SPListItem myItem = myDocList.Items.GetItemById(ID);
myItem[strOwner] = DocAuthor;
myItem.Update();
}
}
catch
{
}
}
4, javascript实现窗口调整大小, 这里注意的是,因为是modaldialog窗口,所以用window.resize 函数不起作用。
function WindowsResize()
{
var width = 400;
var height = 400;
if (width < document.body.scrollWidth)
{
width = document.body.scrollWidth;
}
if (height < document.body.scrollHeight)
{
height = document.body.scrollHeight;
}
width = eval(width + 50);
height = eval(height + 50);
window.dialogWidth = width + "px";
window.dialogHeight = height + "px";
}
另外: 每次修改了document library后, treeview的项目总是无法及时的更新, 需要先清除缓存,不知道是不是treeview的bug.
把这行代码放在page_load事件里面就好了 Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
效果:


浙公网安备 33010602011771号