2010-04-26 69 views
0

我目前正在VS2008 SP1中試驗動態數據實體Web應用程序項目類型,並閱讀了許多教程,其中提供了有用的問題建議,至此我不需要任何解決方案我已經陷入了第一個障礙。在動態數據實體Web應用程序中停止過濾器顯示

在數據庫中,我製作了我的實體模型,我決定從一張名爲「公司」的表開始,只是爲了查看是否可以將顯示屏調整爲令人滿意的小型表格。公司表中有一個名爲「contactid」的列,這個列導致在「聯繫人」表中填充各種聯繫信息的記錄。

默認創建的實體數據模型已經猜測一家公司可能有許多聯繫人記錄。因此,它會盡力提供幫助,並在該頁面上添加一個「聯繫人」過濾器,以允許您查看共享由「聯繫人姓名」字段索引的特定聯繫信息集的所有公司。

不幸的是,聯繫表是一種多用途的聯繫表,它也爲客戶存儲聯繫信息,並且比公司有大約1000倍的客戶。因此,Dropdown會使頁面加載時間呈指數增長,並且不會帶來任何好處。

所以我想停止過濾器出現。唯一的問題是我沒有線索如何關閉它。谷歌迄今爲止在這個問題上表現出頑抗,所以我想知道是否有人在這裏知道如何擺脫無用的過濾器。

回答

1

我最近有同樣的問題。我是動態數據應用程序模板的新手,很快就被其開箱即用的功能所打動。不過,我注意到了一些挫折,特別是你提到的那個。我的幾個頁面永久加載,當我發現它是由外鍵下拉填充引起的時,我花了一段時間才找到解決方案。 問題是這個行爲對網站的內部運作是至關重要的。這些外鍵下拉列表實際上驅動數據網格中的結果集。 (填充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; 
      } 
     } 
    } 

它不完全是我稱之爲完整的解決方案,主要是過濾器的值不包含用戶友好的名稱。我還沒有着手解決這個問題,但這應該讓你更近一步解決你的問題。

相關問題