using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Text; using Kendo.Mvc; using Kendo.Mvc.Extensions; using Kendo.Mvc.UI; using Kreta.Core; using Kreta.Framework.Util; namespace Kreta.Web.Helpers.Grid { public static class Converter { public static GridParameters GridParameter(DataSourceRequest request) { var gridParameters = new GridParameters { LoadResultSetInfo = true }; IList sort = request.Sorts; if (sort != null && sort.Count > 0) { var sortString = new StringBuilder(string.Empty); foreach (SortDescriptor item in sort) { gridParameters.OrderDictionary.Add(item.Member, item.SortDirection); sortString.Append(item.Member); sortString.Append(item.SortDirection == ListSortDirection.Ascending ? " ASC" : " DESC"); sortString.Append(","); } gridParameters.OrderBy = sortString.ToString(0, sortString.Length - 1); } gridParameters.FirstRow = (request.Page - 1) * request.PageSize; gridParameters.LastRow = request.Page * request.PageSize - 1; return gridParameters; } [Obsolete(@"A ToDataSourceResult-t kell használni model listákkal, mivel ezeket mostmár tudjuk sorbarendezni a GridParameters-el, így nincs szükség rá, hogy elmenjen a DataSet a Web-re ezért nincs is szükség itt sorrenezni őket!")] public static DataSourceResult ToDataSourceResult(this DataSet dataSet, DataSourceRequest request = null) { if (dataSet.Tables.Count < 1) { return null; } DataTable firstLevel = dataSet.Tables[0]; DataSourceResult result = firstLevel.ToDataSourceResult(request ?? new DataSourceRequest()); result.Total = Convert.ToInt32(firstLevel.ExtendedProperties["RowCount"]); return result; } /// /// Generikus objektumlistából készítünk Kendo-s DataSourceResult-ot a Kendo-s grid-eknek. /// Sorba rendezzük az adatokat és beállítjuk a lapozást a GridParameters objektum alapján a SortingAndPaging extension method-dal. /// Végül visszaadjuk az eredményt, beállítva az összes elem számát is(ez az összes elem számának megjelenítéséhez kell a grid-en). /// /// A T bármilyen típusú objektum lehet, de leginkább Model-ekkel kellene használni. /// A T típusú objektumlista, amivel dolgozunk. /// A GridParameters property-jei(OrderList, FirstRow, LastRow) alapján határozzuk meg, hogy milyen paraméterek alapján rendezzünk sorba és állítjuk be a lapozást. /// public static DataSourceResult ToDataSourceResult(this List itemList, GridParameters gridParameters = null) { if (itemList == null) { return null; } List data = gridParameters == null ? itemList : itemList.SortingAndPaging(gridParameters.OrderDictionary, gridParameters.FirstRow, gridParameters.LastRow); var dataSourceResult = new DataSourceResult { Data = data, Total = itemList.Count }; return dataSourceResult; } } }