|
@@ -1,4 +1,6 @@
|
|
|
using Android.Content;
|
|
|
+using comal.timesheets.Data_Classes;
|
|
|
+using Nest;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.ObjectModel;
|
|
@@ -6,6 +8,7 @@ using System.Linq;
|
|
|
using System.Reflection;
|
|
|
using Xamarin.Forms;
|
|
|
using Xamarin.Forms.Xaml;
|
|
|
+using static Android.Renderscripts.Sampler;
|
|
|
|
|
|
namespace comal.timesheets
|
|
|
{
|
|
@@ -13,7 +16,8 @@ namespace comal.timesheets
|
|
|
public partial class MobileDataGrid : ContentView
|
|
|
{
|
|
|
ObservableCollection<DataGridFilter> Filters = new ObservableCollection<DataGridFilter>();
|
|
|
- public List<DataGridViewModelItem> Items { get; set; }
|
|
|
+ List<DataGridViewModelItem> Items = new List<DataGridViewModelItem>();
|
|
|
+ List<DataGridViewModelItem> CurrentItems = new List<DataGridViewModelItem>();
|
|
|
|
|
|
PropertyInfo[] info = typeof(DataGridViewModelItem).GetProperties();
|
|
|
|
|
@@ -36,6 +40,11 @@ namespace comal.timesheets
|
|
|
{
|
|
|
listView.ItemsSource = items;
|
|
|
countLbl.Text = items.Count + " Records";
|
|
|
+ CurrentItems.Clear();
|
|
|
+ foreach (var item in items)
|
|
|
+ {
|
|
|
+ CurrentItems.Add(item);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void SetupHeadersAndDataTemplate(DataGridViewModelItem item)
|
|
@@ -161,11 +170,6 @@ namespace comal.timesheets
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void DoSearch()
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
bool bSearching = false;
|
|
|
|
|
|
private void Filters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
|
@@ -180,8 +184,7 @@ namespace comal.timesheets
|
|
|
if (Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.Zero) != null)
|
|
|
{
|
|
|
var filter = Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.Zero);
|
|
|
- var list = Items.Where(x => x.Col0.Contains(filter.Value));
|
|
|
- foreach (DataGridViewModelItem item in list)
|
|
|
+ foreach (DataGridViewModelItem item in RunSearch(Items, filter.Value, "Col0"))
|
|
|
finalList.Add(item);
|
|
|
}
|
|
|
else
|
|
@@ -194,11 +197,9 @@ namespace comal.timesheets
|
|
|
{
|
|
|
List<DataGridViewModelItem> intermediatelist = new List<DataGridViewModelItem>();
|
|
|
var filter = Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.One);
|
|
|
- var list = finalList.Where(x => x.Col1.Contains(filter.Value));
|
|
|
- foreach (var item in list)
|
|
|
+ foreach (DataGridViewModelItem item in RunSearch(finalList, filter.Value, "Col1"))
|
|
|
intermediatelist.Add(item);
|
|
|
- if (intermediatelist.Count > 0)
|
|
|
- finalList.Clear();
|
|
|
+ finalList.Clear();
|
|
|
foreach (DataGridViewModelItem item in intermediatelist)
|
|
|
finalList.Add(item);
|
|
|
}
|
|
@@ -212,42 +213,93 @@ namespace comal.timesheets
|
|
|
{
|
|
|
List<DataGridViewModelItem> intermediatelist = new List<DataGridViewModelItem>();
|
|
|
var filter = Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.Two);
|
|
|
- var list = finalList.Where(x => x.Col2.Contains(filter.Value));
|
|
|
- foreach (var item in list)
|
|
|
+ foreach (DataGridViewModelItem item in RunSearch(finalList, filter.Value, "Col2"))
|
|
|
intermediatelist.Add(item);
|
|
|
- if (intermediatelist.Count > 0)
|
|
|
- finalList.Clear();
|
|
|
+ finalList.Clear();
|
|
|
foreach (DataGridViewModelItem item in intermediatelist)
|
|
|
finalList.Add(item);
|
|
|
}
|
|
|
- else if (finalList.Count == 0)
|
|
|
- {
|
|
|
- foreach (DataGridViewModelItem item in Items)
|
|
|
- finalList.Add(item);
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
if (Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.Three) != null)
|
|
|
{
|
|
|
List<DataGridViewModelItem> intermediatelist = new List<DataGridViewModelItem>();
|
|
|
var filter = Filters.FirstOrDefault(x => x.FilterNumber == FilterNumber.Three);
|
|
|
- var list = finalList.Where(x => x.Col3.Contains(filter.Value));
|
|
|
- foreach (var item in list)
|
|
|
+ foreach (DataGridViewModelItem item in RunSearch(finalList, filter.Value, "Col3"))
|
|
|
intermediatelist.Add(item);
|
|
|
- if (intermediatelist.Count > 0)
|
|
|
- finalList.Clear();
|
|
|
+ finalList.Clear();
|
|
|
foreach (DataGridViewModelItem item in intermediatelist)
|
|
|
finalList.Add(item);
|
|
|
}
|
|
|
|
|
|
+ else if (finalList.Count == 0 && Filters.Count == 0)
|
|
|
+ {
|
|
|
+ foreach (DataGridViewModelItem item in Items)
|
|
|
+ finalList.Add(item);
|
|
|
+ }
|
|
|
+
|
|
|
Refresh(finalList);
|
|
|
|
|
|
bSearching = false;
|
|
|
}
|
|
|
|
|
|
+ private IEnumerable<DataGridViewModelItem> RunSearch(IEnumerable<DataGridViewModelItem> list, string value, string propertyname)
|
|
|
+ {
|
|
|
+ var intermediatelist = new List<DataGridViewModelItem>();
|
|
|
+ foreach (var property in info)
|
|
|
+ {
|
|
|
+ if (property.Name == propertyname)
|
|
|
+ {
|
|
|
+ foreach (var item in list)
|
|
|
+ {
|
|
|
+ if (GetStringValue(property, item).Contains(value)
|
|
|
+ || GetStringValue(property, item).Contains(value.ToUpper())
|
|
|
+ || GetStringValue(property, item).Contains(value.ToLower())
|
|
|
+ || GetStringValue(property, item).Contains(SearchUtils.LowerCaseFirst(value))
|
|
|
+ || GetStringValue(property, item).Contains(SearchUtils.UpperCaseFirst(value))
|
|
|
+ || GetStringValue(property, item).Contains(SearchUtils.UpperCaseSecond(value))
|
|
|
+ )
|
|
|
+ {
|
|
|
+ if (!intermediatelist.Contains(item))
|
|
|
+ intermediatelist.Add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return intermediatelist;
|
|
|
+ }
|
|
|
|
|
|
- private void Header_OnDataGridHeaderTapped(int columnnumber)
|
|
|
+ private string GetStringValue(PropertyInfo property, object item)
|
|
|
{
|
|
|
+ if (property.PropertyType == typeof(string))
|
|
|
+ return (string)property.GetValue(item);
|
|
|
+ else
|
|
|
+ return "";
|
|
|
+ }
|
|
|
|
|
|
+ private void Header_OnDataGridHeaderTapped(int columnnumber, SearchUtils.SortDirection sortdirection)
|
|
|
+ {
|
|
|
+ sortdirection = sortdirection == SearchUtils.SortDirection.Ascending ? SearchUtils.SortDirection.Descending
|
|
|
+ : sortdirection == SearchUtils.SortDirection.Descending ? SearchUtils.SortDirection.Ascending
|
|
|
+ : SearchUtils.SortDirection.Ascending;
|
|
|
+
|
|
|
+ var intermediatelist = new List<DataGridViewModelItem>();
|
|
|
+ foreach (var property in info)
|
|
|
+ {
|
|
|
+ if (property.Name == "Col" + columnnumber)
|
|
|
+ {
|
|
|
+ foreach (var item in SearchUtils.OrderByPropertyName(CurrentItems, "Col" + columnnumber, sortdirection))
|
|
|
+ {
|
|
|
+ intermediatelist.Add(item);
|
|
|
+ }
|
|
|
+ Refresh(intermediatelist);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void SortList(List<DataGridViewModelItem> items, int columnnumber)
|
|
|
+ {
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void Header_OnDataGridHeaderFilterTapped(int columnnumber, string columnname)
|