2009-12-30 38 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(); 
     } 
    }