簡體   English   中英

這是實現POCO的ObjectDataSource排序的方法嗎?

[英]Is this the way to implement ObjectDataSource sorting for a POCO?

當我不得不做這么多工作時,有時會感到自己在忽略某些東西。

此代碼成功地對一列進行排序。 switch語句將必須手動構建以進行其他操作。

我是否忽略了這樣做的“實際/簡單”方法?

注意msdn文檔中似乎有一條評論說這根本不可能,除非我讀錯了(但是它確實起作用了,只是一種痛苦)。

其他說明 :我在這里沒有足夠的信心使用術語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; }
}

使用動態linq庫 這可以使linq查詢以字符串為參數,但是必須准備字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM