Eric's Blog

有需求才有进步

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

背景:
       在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);

效果:

posted on 2008-02-01 14:24  Eric.Chai  阅读(247)  评论(0编辑  收藏  举报