C# 如何将自定义视图设置为SharePoint列表的默认视图?

C# 如何将自定义视图设置为SharePoint列表的默认视图?,c#,list,sharepoint,listview,sharepoint-2010,C#,List,Sharepoint,Listview,Sharepoint 2010,我已经为列表创建了2个视图,现在我想在不同登录时将不同的视图设置为默认视图。 我想用c代码来实现这一点 例如: SPUser LoggedInUser = web.CurrentUser; SPList CurrentList = web.Lists[ListName]; if (LoggedInUser.LoginName == LoginUser) {

我已经为列表创建了2个视图,现在我想在不同登录时将不同的视图设置为默认视图。 我想用c代码来实现这一点

例如:

                SPUser LoggedInUser = web.CurrentUser;

                SPList CurrentList = web.Lists[ListName];

                if (LoggedInUser.LoginName == LoginUser)
                {
                    web.AllowUnsafeUpdates = true;
                    CurrentList.Views[AllItems].DefaultView = false;
                    CurrentList.Views[UserView].DefaultView = true;
                    CurrentList.Update();              // Error here
                    web.AllowUnsafeUpdates = false;

                }
                else if (LoggedInUser.LoginName == LoginAdmin)
                {
                    web.AllowUnsafeUpdates = true;
                    CurrentList.Views[AllItems].DefaultView = true;
                    CurrentList.Views[UserView].DefaultView = false;
                    CurrentList.Update();               // Error here
                    web.AllowUnsafeUpdates = false;
                }
意见如下:

  • 阿利提姆
  • 用户视图
  • 然后

    如果管理员登录,则列表的默认视图为AllItems

    如果用户登录,则列表的默认视图为UserView

    如何使用C#代码实现这一点

    代码片段:

                    SPUser LoggedInUser = web.CurrentUser;
    
                    SPList CurrentList = web.Lists[ListName];
    
                    if (LoggedInUser.LoginName == LoginUser)
                    {
                        web.AllowUnsafeUpdates = true;
                        CurrentList.Views[AllItems].DefaultView = false;
                        CurrentList.Views[UserView].DefaultView = true;
                        CurrentList.Update();              // Error here
                        web.AllowUnsafeUpdates = false;
    
                    }
                    else if (LoggedInUser.LoginName == LoginAdmin)
                    {
                        web.AllowUnsafeUpdates = true;
                        CurrentList.Views[AllItems].DefaultView = true;
                        CurrentList.Views[UserView].DefaultView = false;
                        CurrentList.Update();               // Error here
                        web.AllowUnsafeUpdates = false;
                    }
    

    上面的代码给出了错误:“无法计算表达式,因为代码已优化或本机帧位于调用堆栈的顶部。”

    您还必须在SPView对象上调用Update方法

    SPView yourView = CurrentList.Views[UserView];
    yourView.DefaultView = true;
    yourView.Update();
    

    您还必须对SPView对象调用更新方法

    SPView yourView = CurrentList.Views[UserView];
    yourView.DefaultView = true;
    yourView.Update();
    

    我将此方法保留在扩展方法中

    public static void SetAsDefaultView(this SPList self, string viewName)
        {
            if (!self.Views[viewName].DefaultView)
            {
                self.DefaultView.DefaultView = false;
                self.Views[viewName].DefaultView = true;
                self.Update();
            }
        }
    

    我将此方法保留在扩展方法中

    public static void SetAsDefaultView(this SPList self, string viewName)
        {
            if (!self.Views[viewName].DefaultView)
            {
                self.DefaultView.DefaultView = false;
                self.Views[viewName].DefaultView = true;
                self.Update();
            }
        }