|
@@ -9,11 +9,18 @@ using Xamarin.Forms.Xaml;
|
|
|
|
|
|
namespace comal.timesheets
|
|
|
{
|
|
|
- public delegate void DataGridTitleSet(string title);
|
|
|
+ public enum DataGridSaveType
|
|
|
+ {
|
|
|
+ None,
|
|
|
+ Single,
|
|
|
+ Multiple
|
|
|
+ }
|
|
|
+ public delegate void DataGridOptionsSet(string title, DataGridSaveType savetype = DataGridSaveType.None);
|
|
|
[XamlCompilation(XamlCompilationOptions.Compile)]
|
|
|
public partial class MobileDataGrid : ContentView
|
|
|
{
|
|
|
- public event DataGridTitleSet OnTitleSet;
|
|
|
+ DataGridSaveType SaveType { get; set; }
|
|
|
+ public event DataGridOptionsSet OnOptionsSet;
|
|
|
bool bSearching = false;
|
|
|
ObservableCollection<DataGridFilter> Filters = new ObservableCollection<DataGridFilter>();
|
|
|
List<DataGridViewModelItem> Items = new List<DataGridViewModelItem>();
|
|
@@ -28,7 +35,7 @@ namespace comal.timesheets
|
|
|
Filters.CollectionChanged += Filters_CollectionChanged;
|
|
|
}
|
|
|
|
|
|
- public void Setup(List<DataGridViewModelItem> items, Type type)
|
|
|
+ public void Setup(List<DataGridViewModelItem> items, Type type, DataGridSaveType savetype = DataGridSaveType.None)
|
|
|
{
|
|
|
Type = type;
|
|
|
Items = items;
|
|
@@ -37,10 +44,15 @@ namespace comal.timesheets
|
|
|
SetupHeadersAndDataTemplate(items.First());
|
|
|
Refresh(Items);
|
|
|
});
|
|
|
- OnTitleSet?.Invoke(type.Name);
|
|
|
+ OnOptionsSet?.Invoke(type.Name, savetype);
|
|
|
+ SaveType = savetype;
|
|
|
+ itemsListView.SelectionMode = savetype == DataGridSaveType.None ? ListViewSelectionMode.None : ListViewSelectionMode.Single;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// Never pass CurrentItems into this function - create an intermediate list first
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="items"></param>
|
|
|
private void Refresh(List<DataGridViewModelItem> items)
|
|
|
{
|
|
|
itemsListView.ItemsSource = items;
|
|
@@ -66,8 +78,6 @@ namespace comal.timesheets
|
|
|
ChangeHeaderColour(false, count);
|
|
|
count++;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
public void SetupHeadersAndDataTemplate(DataGridViewModelItem item)
|
|
@@ -130,6 +140,27 @@ namespace comal.timesheets
|
|
|
}
|
|
|
|
|
|
#region Events
|
|
|
+ private void Row_Tapped(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ var item = itemsListView.SelectedItem as DataGridViewModelItem;
|
|
|
+ if (item != null)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ List<DataGridViewModelItem> list = new List<DataGridViewModelItem>();
|
|
|
+ foreach (var i in CurrentItems)
|
|
|
+ list.Add(i);
|
|
|
+ Refresh(list);
|
|
|
+ }
|
|
|
+
|
|
|
private void SearchEnt_OnDataGridSearchEntryChanged(int columnnumber, string value, string colname)
|
|
|
{
|
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
@@ -142,22 +173,6 @@ namespace comal.timesheets
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private FilterNumber FindNumber(int columnnumber)
|
|
|
- {
|
|
|
- switch (columnnumber)
|
|
|
- {
|
|
|
- case 0:
|
|
|
- return FilterNumber.Zero;
|
|
|
- case 1:
|
|
|
- return FilterNumber.One;
|
|
|
- case 2:
|
|
|
- return FilterNumber.Two;
|
|
|
- case 3:
|
|
|
- return FilterNumber.Three;
|
|
|
- default:
|
|
|
- return FilterNumber.Zero;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
private void Filters_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
|
|
{
|
|
@@ -288,45 +303,9 @@ namespace comal.timesheets
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
Filters.Remove(toRemove.First());
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- 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 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)
|
|
|
{
|
|
|
var intermediatelist = new List<DataGridViewModelItem>();
|
|
@@ -352,12 +331,12 @@ namespace comal.timesheets
|
|
|
{
|
|
|
filters.Add(list);
|
|
|
}
|
|
|
- MultiSelectPage page = new MultiSelectPage(options, filters, columnnumber, columnname);
|
|
|
- page.OnPageSaved += Page_OnPageSaved;
|
|
|
- Navigation.PushAsync(page);
|
|
|
+ MultiSelectPage filterpage = new MultiSelectPage(options, filters, columnnumber, columnname);
|
|
|
+ filterpage.OnPageSaved += FilterPage_OnPageSaved;
|
|
|
+ Navigation.PushAsync(filterpage);
|
|
|
}
|
|
|
|
|
|
- private void Page_OnPageSaved(IEnumerable<MultiSelectPageViewItem> items, int columnnumber, string columnname)
|
|
|
+ private void FilterPage_OnPageSaved(IEnumerable<MultiSelectPageViewItem> items, int columnnumber, string columnname)
|
|
|
{
|
|
|
var intermediateList = new List<DataGridFilter>();
|
|
|
var list = Filters.Where(x => x.ColNumber == "Col" + columnnumber && x.FilterType == FilterType.Selected);
|
|
@@ -373,7 +352,32 @@ namespace comal.timesheets
|
|
|
|
|
|
var newlist = Filters.Where(x => x.ColNumber == "Col" + columnnumber);
|
|
|
}
|
|
|
-
|
|
|
+ #endregion
|
|
|
+ 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 ChangeHeaderColour(bool filterpresent, int colnumber)
|
|
|
{
|
|
|
foreach (var header in headerGrid.Children)
|
|
@@ -385,7 +389,30 @@ namespace comal.timesheets
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- #endregion
|
|
|
+ private string GetStringValue(PropertyInfo property, object item)
|
|
|
+ {
|
|
|
+ if (property.PropertyType == typeof(string))
|
|
|
+ return (string)property.GetValue(item);
|
|
|
+ else
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ private FilterNumber FindNumber(int columnnumber)
|
|
|
+ {
|
|
|
+ switch (columnnumber)
|
|
|
+ {
|
|
|
+ case 0:
|
|
|
+ return FilterNumber.Zero;
|
|
|
+ case 1:
|
|
|
+ return FilterNumber.One;
|
|
|
+ case 2:
|
|
|
+ return FilterNumber.Two;
|
|
|
+ case 3:
|
|
|
+ return FilterNumber.Three;
|
|
|
+ default:
|
|
|
+ return FilterNumber.Zero;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -426,6 +453,21 @@ namespace comal.timesheets
|
|
|
{
|
|
|
public Guid ID { get; set; }
|
|
|
|
|
|
+ private bool isSelected;
|
|
|
+ public bool IsSelected
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return isSelected;
|
|
|
+ }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ isSelected = value;
|
|
|
+ Color = isSelected == true ? Color.FromHex("#91a3b0") /*Cadet Gray*/ : Color.Default;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public Color Color { get; set; }
|
|
|
+
|
|
|
public List<Tuple<string, string>> Data { get; set; }
|
|
|
public string Col0 { get; set; }
|
|
|
public string Col1 { get; set; }
|
|
@@ -457,6 +499,7 @@ namespace comal.timesheets
|
|
|
ColWidth1 = data.Count > 1 ? new GridLength(1, GridUnitType.Star) : new GridLength(0, GridUnitType.Absolute);
|
|
|
ColWidth2 = data.Count > 2 ? new GridLength(1, GridUnitType.Star) : new GridLength(0, GridUnitType.Absolute);
|
|
|
ColWidth3 = data.Count > 3 ? new GridLength(1, GridUnitType.Star) : new GridLength(0, GridUnitType.Absolute);
|
|
|
+ IsSelected = false;
|
|
|
}
|
|
|
}
|
|
|
}
|