2012-02-24 6 views
2

私は時々私がこのような多くの仕事をしなければならないときに私が何かを見過ごしていると感じることがあります。これは、POCOのObjectDataSourceソートを実装する方法ですか?

このコードは、1つの列を正常にソートします。スイッチステートメントは手動で追加する必要があります。

私はこれを行う "実際の/簡単な"方法を見落としていますか?

ノートは:私は間違って読んでいる場合を除き、これは、全く不可能であると言ってmsdn docsにコメントがあるように思われる(が、それは、単に痛み、このような作業を行います)。

他のメモ:ここではDACとPOCOという用語を完全に自信を持って使用しています。

のObjectDataSource + GridViewの:DACから

<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> 

スニペット:

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コードとよく似ています。決して簡単ではなかった。 –

+1

@ JesseC.Slicer - ASP.NET WinForms?それはすてきなトリックだろう。 –

+0

@ M.Babcock脳よりも速く動く指。もちろんWEBフォーム。 –

答えて

0

Dynamic linq libraryを使用してください。これにより、文字列をパラメータとして取るlinqクエリを作成できますが、文字列を準備する必要があります。

文字列は、条件、並べ替え、値と別の値との間でフィルタリングして、何でも使用できます。

関連する問題