2012-02-24 2 views
2

나는이 일을 많이해야 할 때 뭔가를 간과하는 느낌을받는 경우가 있습니다.POCO에 대한 ObjectDataSource 정렬을 구현하는 방법입니까?

이 코드는 하나의 열을 성공적으로 정렬합니다. 스위치 명령문은 수동으로 추가로 작성해야합니다.

나는 이것을 "실제/쉬운"방법으로 간과하고 있습니까?

참고 : 나는 그 잘못을 읽고 있어요 않는 한이 전혀 불가능하다 말하는 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 두뇌보다 빠르게 움직이는 손가락. 물론 WEBforms. –

답변

0

Dynamic linq library을 사용하십시오. 이것은 문자열을 매개 변수로 사용하는 linq 쿼리를 만들 수 있지만 문자열은 준비해야합니다.

문자열은 조건에 따라 필터링하고, 값과 다른 값 사이에서 정렬 할 수 있습니다.

관련 문제