2009-12-30 48 views
0

我正在使用動態數據Web實體應用程序網站,並需要控制放置在PageTemplates/list.aspx頁面上的動態過濾器。ASP.NET動態數據 - 過濾器|如何將用戶默認過濾爲當前用戶

我有一個表使用默認的PageTemplates/list.aspx視圖,並且此表具有用戶表的外鍵。外鍵正確顯示在過濾器中,但我想要將過濾器默認爲當前用戶(如果存在於過濾器列表中)。

如何設置將用戶列入當前登錄用戶的dynamicfilter的selectedvalue?

我使用Windows身份驗證,所以我有userid。用戶表還具有用戶名和名稱,動態過濾器當前顯示名稱。

vs2008 3.5 sp1(無期貨)。

+0

你的問題是非常模糊 – 2009-12-30 19:44:08

回答

1

我最終捕獲了PageTemplates/list.aspx上的FilterRepeater.ItemDataBound事件,並尋找了MetaForeignKeyColumn和我想要處理的過濾器的名稱。然後使用模型查找用戶數據並設置所選值以匹配登錄用戶。

以下代碼來自我的測試,需要清理:TK_DBA是數據庫管理員使用應用程序的參考表並作爲引用它的表的過濾器出現。

protected void Page_Init(object sender, EventArgs e) 
    { 
     DynamicDataManager1.RegisterControl(GridView1, true /*setSelectionFromUrl*/); 
     FilterRepeater.ItemDataBound += new RepeaterItemEventHandler(FilterRepeater_ItemDataBound); 
    } 

    void FilterRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     object e1 = e.Item.DataItem; 
     MetaForeignKeyColumn e2 = e.Item.DataItem as MetaForeignKeyColumn; 
     Test2.FilterUserControl e3 = ((RepeaterItem)e.Item).FindControl("DynamicFilter") as Test2.FilterUserControl; 

     if (e2 != null && e2.Name == "TK_DBA") 
     { 
      var dba = e2.Model.GetTable("TK_DBA").GetQuery().OfType<Test2.Model.TK_DBA>(); 
      var q = from d in dba 
        where d.userid == HttpContext.Current.User.Identity.Name 
        select d; 
      if (q.Count() == 1) e3.DropDownList1.SelectedValue = q.First().id.ToString(); 
     } 
    }