2012-11-15 47 views
5

我有了使用元數據構建多個過濾器控件,如ASP.NET動態數據網站:如何更改動態過濾器控件的順序?

[ScaffoldTable(true), MetadataType(typeof(Fees.Metadata))] 
public partial class Fees 
{ 
    public class Metadata 
    { 
     [FilterUIHint("DateRange")] 
     public object InvoiceDate; 
    } 
{ 

如何在一個特定的方式訂購這些過濾器。這看起來非常隨意。我可以使用元數據屬性嗎?還是應該修改頁面模板?什麼是?

回答

2

行,所以我最終只是手動重新排序上的自定義代碼隱藏頁,像這樣的控件列表:

Control date_filter = FilterRepeater.Controls[1]; 
FilterRepeater.Controls.RemoveAt(1); 
FilterRepeater.Controls.Add(date_filter); 

中3頁上控件的這需要在第二個出來並將其添加到年底。

如果我需要再次使用,我可能會創建一個方法並在控件名稱上進行搜索。

這是一個粗略的解決方案,但它適合我這種情況。如果有人發現更好的方式讓我知道。


OK更好的辦法:

  1. 安裝此:http://nuget.org/packages/NotAClue.DynamicData.Extensions
  2. 添加參考 「使用NotAClue.ComponentModel.DataAnnotations;」如果您使用的是獨立的實體頁面
  3. 添加[過濾器(訂單= 1)]元數據標籤屬性
+2

非常感謝您使用NotAClue指令。 –

1

到底這是相當簡單的。我有四個過濾器,現在它們按照正確的順序出現....您需要做的就是將顯示/順序指令添加到類元數據定義中,如:其中'n'是外觀順序。

在我使用的元數據定義(VB - 所以你需要將其轉換爲您的方案)..

我的文件名:OpCoProductRev.vb

<MetadataType(GetType(OpCoProductRevMetadata))> 
Partial Public Class OpCoProductRev 

End Class 


Partial Public Class OpCoProductRevMetadata 

    <Required()> 
    <DisplayName("xxxx")> 
    <UIHint("xxxx")> 
    <FilterUIHint("xxxxFilter")> 
    <Display(Order:=1)> 
    Public Property xxxx As Object 

    <Required()> 
    <DisplayName("yyyyy")> 
    <UIHint("yyyyy")> 
    <FilterUIHint("yyyyyFilter")> 
    <Display(Order:=2)> 
    Public Property yyyyy As Object 

    <Required()> 
    <DisplayName("zzzzzz")> 
    <UIHint("zzzzzz")> 
    <FilterUIHint("zzzzzzFilter")> 
    <Display(Order:=3)> 
    Public Property zzzzzz As Object 

    <Required()> 
    <DisplayName("aaa")> 
    <UIHint("aaa")> 
    <FilterUIHint("aaaFilter")> 
    <Display(Order:=4)> 
    Public Property aaa As Object 


End Class 

希望它可以幫助...