Преглед на файлове

PRS MOBILE - Data Grid improvements (added selection of items)

Nick-PRSDigital@bitbucket.org преди 2 години
родител
ревизия
be624c8e4b

+ 1 - 1
prs.desktop/Panels/DailyReports/DailyReport.xaml.cs

@@ -175,7 +175,7 @@ namespace PRSDesktop
 
         private string _taskcategory = "Open";
 
-        private bool bProgramaticallyChanging;
+        private bool bProgramaticallyChanging = false;
 
         private bool bSelectingAssignment;
         

+ 24 - 9
prs.mobile/comal.timesheets/DataGridHost.xaml.cs

@@ -9,13 +9,17 @@ using Xamarin.Forms.Xaml;
 
 namespace comal.timesheets
 {
-	[XamlCompilation(XamlCompilationOptions.Compile)]
-	public partial class DataGridHost : ContentPage
-	{
-		public DataGridHost (MobileDataGrid datagrid)
-		{
-			InitializeComponent ();
+    public delegate void DataGridHostSaved(List<DataGridViewModelItem> selecteditems);
+    [XamlCompilation(XamlCompilationOptions.Compile)]
+    public partial class DataGridHost : ContentPage
+    {
+        public event DataGridHostSaved OnSaved;
+        public MobileDataGrid DataGrid { get; set; }
+        public DataGridHost(MobileDataGrid datagrid)
+        {
+            InitializeComponent();
             NavigationPage.SetHasBackButton(this, false);
+            DataGrid = datagrid;
             datagrid.OnOptionsSet += Datagrid_OnTitleSet;
             stackLayout.Children.Add(datagrid);
         }
@@ -25,7 +29,7 @@ namespace comal.timesheets
             Device.BeginInvokeOnMainThread(() =>
             {
                 titleLbl.Text = title + "s";
-                saveBtn.IsVisible = savetype == DataGridSaveType.None? false : true;
+                saveBtn.IsVisible = savetype == DataGridSaveType.None ? false : true;
             });
         }
 
@@ -35,8 +39,19 @@ namespace comal.timesheets
         }
 
         private void SaveBtn_Clicked(object sender, EventArgs e)
-        { 
-        
+        {
+            OnSaved?.Invoke(CreateSelectedList());
+        }
+
+        private List<DataGridViewModelItem> CreateSelectedList()
+        {
+            var list = DataGrid.Items.Where(x => x.IsSelected == true);
+            List<DataGridViewModelItem> newlist = new List<DataGridViewModelItem>();
+            foreach (var item in list)
+            {
+                newlist.Add(item);
+            }
+            return newlist;
         }
     }
 }

+ 46 - 13
prs.mobile/comal.timesheets/MobileDataGrid.xaml.cs

@@ -19,11 +19,12 @@ namespace comal.timesheets
     [XamlCompilation(XamlCompilationOptions.Compile)]
     public partial class MobileDataGrid : ContentView
     {
+        public List<DataGridViewModelItem> Items { get; set; }
         DataGridSaveType SaveType { get; set; }
+
         public event DataGridOptionsSet OnOptionsSet;
         bool bSearching = false;
-        ObservableCollection<DataGridFilter> Filters = new ObservableCollection<DataGridFilter>();
-        List<DataGridViewModelItem> Items = new List<DataGridViewModelItem>();
+        ObservableCollection<DataGridFilter> Filters = new ObservableCollection<DataGridFilter>();       
         List<DataGridViewModelItem> CurrentItems = new List<DataGridViewModelItem>();
         PropertyInfo[] info = typeof(DataGridViewModelItem).GetProperties();
         Dictionary<string, List<string>> FilterOptions = new Dictionary<string, List<string>>();
@@ -32,6 +33,7 @@ namespace comal.timesheets
         public MobileDataGrid()
         {
             InitializeComponent();
+            Items = new List<DataGridViewModelItem>();
             Filters.CollectionChanged += Filters_CollectionChanged;
         }
 
@@ -46,7 +48,6 @@ namespace comal.timesheets
             });
             OnOptionsSet?.Invoke(type.Name, savetype);
             SaveType = savetype;
-            itemsListView.SelectionMode = savetype == DataGridSaveType.None ? ListViewSelectionMode.None : ListViewSelectionMode.Single;
         }
 
         /// <summary>
@@ -143,17 +144,18 @@ namespace comal.timesheets
         private void Row_Tapped(object sender, EventArgs e)
         {
             var item = itemsListView.SelectedItem as DataGridViewModelItem;
-            if (item != null)
+            if (item != null && SaveType != DataGridSaveType.None)
             {
-                
-
-                bool selected = item.IsSelected;
-                var foundItem = Items.FirstOrDefault(x => x.ID == item.ID);
-                foundItem.IsSelected = selected ? false : true;
-
-                var currentListFoundItem = CurrentItems.FirstOrDefault(x => x.ID == item.ID);
-                if (currentListFoundItem != null)
-                    currentListFoundItem.IsSelected = selected ? false : true;
+                switch (SaveType)
+                {
+                    case DataGridSaveType.Single:
+                        AddSelectionToLists(item);
+                        UnselectOthers(item);
+                        break;
+                    case DataGridSaveType.Multiple:
+                        AddSelectionToLists(item);
+                        break;
+                }
             }
             List<DataGridViewModelItem> list = new List<DataGridViewModelItem>();
             foreach (var i in CurrentItems)
@@ -161,6 +163,37 @@ namespace comal.timesheets
             Refresh(list);
         }
 
+        private void UnselectOthers(DataGridViewModelItem item)
+        {
+            UnselectItems(item, Items);
+            UnselectItems(item, CurrentItems);
+        }
+
+        private void UnselectItems(DataGridViewModelItem item, List<DataGridViewModelItem> selectedlist)
+        {
+            var list = selectedlist.Where(x => x.IsSelected == true);
+            foreach (var foundItem in list)
+            {
+                if (foundItem.ID != item.ID)
+                    foundItem.IsSelected = false;
+            }
+        }
+
+        private void AddSelectionToLists(DataGridViewModelItem item)
+        {
+            bool selected = item.IsSelected;
+
+            AddSelectionToList(selected, Items, item.ID);
+            AddSelectionToList(selected, CurrentItems, item.ID);            
+        }
+
+        private void AddSelectionToList(bool selected, List<DataGridViewModelItem> list, Guid ID)
+        {
+            var foundItem = list.FirstOrDefault(x => x.ID == ID);
+            if (foundItem != null)
+                foundItem.IsSelected = selected ? false : true;
+        }
+
         private void SearchEnt_OnDataGridSearchEntryChanged(int columnnumber, string value, string colname)
         {
             if (string.IsNullOrWhiteSpace(value))

+ 1 - 1
prs.mobile/comal.timesheets/ProductsGrid.cs

@@ -13,7 +13,7 @@ namespace comal.timesheets
 {
     public class ProductsGrid : MobileDataGrid
     {
-        public ProductsGrid(DataGridSaveType savetype = DataGridSaveType.Multiple)
+        public ProductsGrid(DataGridSaveType savetype = DataGridSaveType.None)
         {
             Task.Run(async() => 
             {

+ 1 - 1
prs.server/PRSServer.iss

@@ -5,7 +5,7 @@
 #pragma verboselevel 9
 
 #define MyAppName "PRS Server"
-#define MyAppVersion "7.07a"
+#define MyAppVersion "7.08a"
 #define MyAppPublisher "PRS Digital"
 #define MyAppURL "https://www.prs-software.com.au"
 #define MyAppExeName "PRSServer.exe"