在动态数据实体Web应用程序中停止过滤器显示

在动态数据实体Web应用程序中停止过滤器显示

问题描述:

我目前正在VS2008 SP1中试验动态数据实体Web应用程序项目类型,并阅读了许多教程,其中提供了有用的问题建议,至此我不需要任何解决方案我已经陷入了第一个障碍。在动态数据实体Web应用程序中停止过滤器显示

在数据库中,我制作了我的实体模型,我决定从一张名为“公司”的表开始,只是为了查看是否可以将显示屏调整为令人满意的小型表格。公司表中有一个名为“contactid”的列,这个列导致在“联系人”表中填充各种联系信息的记录。

默认创建的实体数据模型已经猜测一家公司可能有许多联系人记录。因此,它会尽力提供帮助,并在该页面上添加一个“联系人”过滤器,以允许您查看共享由“联系人姓名”字段索引的特定联系信息集的所有公司。

不幸的是,联系表是一种多用途的联系表,它也为客户存储联系信息,并且比公司有大约1000倍的客户。因此,Dropdown会使页面加载时间呈指数增长,并且不会带来任何好处。

所以我想停止过滤器出现。唯一的问题是我没有线索如何关闭它。谷歌迄今为止在这个问题上表现出顽抗,所以我想知道是否有人在这里知道如何摆脱无用的过滤器。

我最近有同样的问题。我是动态数据应用程序模板的新手,很快就被其开箱即用的功能所打动。不过,我注意到了一些挫折,特别是你提到的那个。我的几个页面永久加载,当我发现它是由外键下拉填充引起的时,我花了一段时间才找到解决方案。 问题是这个行为对网站的内部运作是至关重要的。这些外键下拉列表实际上驱动数据网格中的结果集。 (填充ddlist,然后设置默认值,这会引发一个事件来过滤数据网格。)所以关键是要改变这个行为,而不是禁用它。 我解决这个问题的第一条线索来自我在网上找到的一系列优秀博客。 Kudos to Stephen Naughton 这个概念是创建一个metacolumn属性,并装饰metatable部分类中的有问题的实体。 (我将其命名DisableFilter)

所以,你有一张桌子和元表部分类定义类似于结束:

[MetadataType(typeof(InvoiceMetadata))] 
public partial class Invoice { 

} 

public partial class InvoiceMetadata { 
    [ScaffoldColumn(false)] 
    public string InvoiceId { get; set; } 
    [ScaffoldColumn(false)] 
    public string LiquidatorInvoiceId { get; set; } 
    [ScaffoldColumn(false)] 
    public string CreatedBy { get; set; } 
    [ScaffoldColumn(false)] 
    public System.Nullable<System.DateTime> LastModifiedDate { get; set; } 
    [ScaffoldColumn(false)] 
    public string LastModifiedBy { get; set; } 
    [DisableFilter] 
    public LeadAccount LeadAccount { get; set; } 
} 

我的新创建的属性,DisableFilter,装点LeadAccount(我们的联系表)采集。

一旦装饰了列,我就通过添加对新属性的检查来更改ForeignKey.ascx控件的基本行为。如果过滤器被禁用,我只使用默认项目填充ddlist。

if (!Page.IsPostBack) { 
      if (!Column.IsRequired) { 
       DropDownList1.Items.Add(new ListItem("[Not Set]", NullValueString)); 
      } 
      if (Column.IsFilterDisabled()) { 

       DropDownList1.Items.Add(new ListItem(DefaultValue, DefaultValue)); 
      } 
      else { 
       PopulateListControl(DropDownList1); 
      } 
      // Set the initial value if there is one 
      string initialValue = DefaultValue; 
      if (!String.IsNullOrEmpty(initialValue)) { 
       DropDownList1.SelectedValue = initialValue; 
      } 
     } 
    } 

它不完全是我称之为完整的解决方案,主要是过滤器的值不包含用户友好的名称。我还没有着手解决这个问题,但这应该让你更近一步解决你的问题。