Просмотр исходного кода

PRS MOBILE - generic mobile grid (for digital forms / multiple uses)

Nick-PRSDigital@bitbucket.org 2 лет назад
Родитель
Сommit
76c1fcf615

+ 15 - 0
prs.mobile/comal.timesheets/BaseMobileGrid.cs

@@ -0,0 +1,15 @@
+using InABox.Core;
+using Syncfusion.SfDataGrid.XForms;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace comal.timesheets
+{
+    public interface BaseMobileGrid<TEntity> where TEntity : Entity, IRemotable, IPersistent, new()
+    {
+        public Columns<TEntity> VisibleColumns { get; set; }
+
+        public void DefineVisibleColumns(Columns<TEntity> columns);
+    }
+}

+ 54 - 0
prs.mobile/comal.timesheets/MobileGrid.cs

@@ -0,0 +1,54 @@
+using InABox.Clients;
+using InABox.Core;
+using Syncfusion.SfDataGrid.XForms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Xamarin.Forms;
+
+namespace comal.timesheets
+{
+    public abstract class MobileGrid<TEntity> : SfDataGrid, BaseMobileGrid<TEntity> where TEntity : Entity, IRemotable, IPersistent, new()
+    {
+        List<string> ColumnNames = new List<string>();
+
+        CoreTable Data;
+
+        public Columns<TEntity> VisibleColumns { get; set; }
+
+        public MobileGrid(Filter<TEntity> filter, Columns<TEntity> columns, SortOrder<TEntity> sortOrder)
+        {
+            Data = new Client<TEntity>().Query(filter, CheckColumns(columns), sortOrder);
+            Grid grid = new Grid();
+            grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });            
+        }
+
+        public void Init(Filter<TEntity> filter, Columns<TEntity> columns, SortOrder<TEntity> sortOrder)
+        {
+            Data = new Client<TEntity>().Query(filter, CheckColumns(columns), sortOrder);
+        }
+
+        private Columns<TEntity> CheckColumns(Columns<TEntity> columns)
+        {
+            foreach (var colname in ColumnNames)
+            {
+                if (!columns.ColumnNames().Contains(colname))
+                    columns.Add(new Column<TEntity>(colname));
+            }
+
+            if (!columns.ColumnNames().Contains("ID"))
+                columns.Add(new Column<TEntity>(x => x.ID));
+
+            return columns;
+        }
+
+        public void DefineVisibleColumns(Columns<TEntity> columns)
+        {
+            foreach(var colname in columns.ColumnNames())
+                ColumnNames.Add(colname);
+
+            VisibleColumns = columns;
+        }
+    }
+}