2012-02-24 53 views
2

當我必須做這麼多工作時,我有時會感覺到我忽略了某些東西。這是爲POCO實現ObjectDataSource排序的方式嗎?

此代碼成功地對一列進行排序。 switch語句將不得不手動編譯出來。

我是否忽視了「實際/簡單」的方式來做到這一點?

notemsdn docs中似乎有一條評論說除非我讀錯了(但它確實有效,只是一種痛苦),這根本不可能。

其他注意事項:我在這裏使用的術語DAC和POCO具有不充分的信心,所以如果它可能會更好,請糾正我。

的ObjectDataSource +的GridView

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowSorting="True"> 
     <Columns> 
      <asp:BoundField DataField="AppID" HeaderText="AppID" SortExpression="AppID" /> 
      <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
      <asp:BoundField DataField="Timestamp" HeaderText="Timestamp" SortExpression="Timestamp" /> 
      DataField="Credit" HeaderText="Credit" SortExpression="Credit" /> 
     </Columns> 
    </asp:GridView> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetLeads" TypeName="Leads.LeadsContainer" SortParameterName="sortParameter"> 
    </asp:ObjectDataSource> 

片段從DAC

public List<ILead> GetLeads(string sortParameter) 
    { 
     List<ILead> leads = new List<ILead>(); 
     int numLeads = 10; 
     Random random = new Random(); 
     while (leads.Count < numLeads) 
     { 
      leads.Add(Lead.CreateRandom(random)); 
     } 
     string[] sortExpressions = sortParameter.Split(','); 
     if (sortExpressions.Length > 0) 
     { 
      string sortExpression = sortExpressions[0]; 
      string[] sortInfos = sortExpression.Split(' '); 
      string sortField = sortInfos[0]; 
      string sortDirection = (sortInfos.Length == 1 ? "ASC" : "DESC"); 
      switch (sortField) 
      { 
       case "Timestamp": 
        switch (sortDirection) 
        { 
         case "ASC": 
          leads = leads.OrderBy(c => c.Timestamp).ToList(); 
          break; 
         case "DESC": 
          leads = leads.OrderByDescending(c => c.Timestamp).ToList(); 
          break; 
         default: 
          break; 
        } 
        break; 
       default: 
        break; 
      } 
     } 
     return leads; 
    } 

POCO(接口)

public interface ILead 
{ 
    string AppID { get; set; } 
    string Type { get; set; } 
    DateTime Timestamp { get; set; } 
    string CDNumber { get; set; } 
    string IP { get; set; } 
    string ESourceID { get; set; } 
    string State { get; set; } 
    DateTime DateOfBirth { get; set; } 
    string Email { get; set; } 
    bool IsVetran { get; set; } 
    string Credit { get; set; } 
} 
+0

看起來很像我見過的所有必須這樣做的ASP.NET WinForms代碼。從未如此簡單。 – 2012-02-24 03:49:36

+1

@ JesseC.Slicer - ASP.NET的WinForms?這將是一個巧妙的把戲。 – 2012-02-24 04:09:04

+0

@ M.Babcock手指移動速度比大腦快。當然是WEBforms。 – 2012-02-24 04:32:36

回答

0

使用Dynamic linq library。這可以使linq查詢以字符串作爲參數,但是必須準備字符串。

該字符串可以用於任何事物,根據條件進行過濾,在一個值與另一個值之間進行排序。

相關問題