Frage

In meinem Versuch zu ermöglichen, Sortieren und Filtern in Verbindung mit dem MVC contrib. Gitter I haben beschlossen, eine Ansichtsmodell zu verwenden, die die Rasterdaten plus die Sortier- und Filterinformationen enthält. Ich habe ein Formular unter dem Gitter und das Ansichtsmodell verwendet wird, um den Zustand der Form zu halten und die Daten für das Netz zu tragen:

public class GridViewModel<T>
    {
        public int Page {get; set;} // current page of grid
        public string OrderBy {get; set;} // name of the column
        public bool Asc {get; set;} 
        public string Operation {get; set;} // SW - Startswith, C - Contains
        public string Column {get; set;} // name of the column where operation takes place
        public string Argument {get; set;} // argument for operation
        public int RowsPerPage {get; set;} // visible number of rows per page

        public List<T> Data {get; set;}

        public GridViewModel(List<T> Data)
        {
            this.Data = Data;
        }
        public GridViewModel()
        {
            Page = 1;
            Asc = true;
            RowsPerPage = 10;
            Argument = "";
        }

        public int getNumberofPages()
        {
            return (int) Math.Ceiling(Convert.ToDouble(Data.Count) / Convert.ToDouble(RowsPerPage));
        }
    }

Das Formular erstellt wird HtmlHelpers und im Ansichtsmodell vorbei.

Das Ansichtsmodell wird in einer Service-Methode wie folgt erstellt (nicht vollständig):

public GridViewModel<Bla> GetGridData(GridViewModel<Bla> GridViewModel)
        {
            IOrderedEnumerable<Bla> list = GetAllBlas();

            string Argument = GridViewModel.Argument.Trim();
            switch (GridViewModel.Column)
            {
                case "Age":
                    switch (GridViewModel.Operation)
                    {
                        case "SW":
                            list = list.Where(c => c.Age.ToString().StartsWith(Argument)).OrderBy(c => c.ProposalDateTime);
                            break;
                        case "C":
                            list = list.Where(c => c.Age.ToString().Contains(Argument)).OrderBy(c => c.ProposalDateTime);
                            break;
                        default:
                            break;
                    }
                    break;

                default:
                    break;
            }

            int start_index = (GridViewModel.RowsPerPage * GridViewModel.Page) - GridViewModel.RowsPerPage;

            switch (GridViewModel.OrderBy)
            {
                case "Age":
                    list = GridViewModel.Asc == true ? list.OrderBy(c => c.Age) : list.OrderByDescending(c => c.Age);
                    break;
                case "ProposalDateTime":
                    list = GridViewModel.Asc == true ? list.OrderBy(c => c.ProposalDateTime) : list.OrderByDescending(c => c.ProposalDateTime);
                    break;
                case "UpdateDateTime":
                    list = GridViewModel.Asc == true ? list.OrderBy(c => c.UpdateDateTime) : list.OrderByDescending(c => c.UpdateDateTime);
                    break;
                default:
                    list = GridViewModel.Asc == true ? list.OrderBy(c => c.ProposalDateTime) : list.OrderByDescending(c => c.ProposalDateTime);
                    break;
            }

            int number_of_rows = list.Count();
            if (start_index > number_of_rows)
            {
                start_index = 0;
            }

            GridViewModel.Data = list.Skip<Bla>((int)start_index).Take<Bla>((int)GridViewModel.RowsPerPage).ToList();

            return GridViewModel;
        }

Das funktioniert aber fühlt sich nicht richtig noch ...

Ich frage mich, ob dieser Code verbessert werden könnte - hat jemand etwas ähnliches getan? Jedes Feedback würde sehr geschätzt. Vielen Dank im Voraus.

Mit freundlichen Grüßen

Christian

War es hilfreich?

Lösung

Die nächste Sache, eine Antwort finden Sie hier (Vorschlag: Sergey Prochorenko):

http://sprokhorenko.blogspot.com/2009/ 12 / dedicated-to-my-wife.html

Es jqGrid spezifisch ist, aber mich mit ein paar Ideen zur Verfügung gestellt.

Christian

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top