Это способ реализации сортировки ObjectDataSource для POCO? - PullRequest
2 голосов
/ 24 февраля 2012

У меня иногда возникает ощущение, что я что-то упускаю, когда мне приходится выполнять эту большую работу.

Этот код успешно сортирует один столбец.Оператор switch должен быть построен вручную для дополнительных действий.

Я пропускаю "фактический / простой" способ сделать это?

note : кажется, чтобыть комментарием в msdn 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>

Фрагмент из ЦАП :

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

1 Ответ

0 голосов
/ 22 марта 2012

Используйте Динамическую библиотеку linq .Это может сделать запрос linq, принимающий строку в качестве параметра, однако строка должна быть подготовлена.

Строка может использоваться для чего угодно, фильтрации в зависимости от условий, сортировки между одним значением и другим.

...