using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Tango.FSE.Procedures.Dialogs
{
///
/// Interaction logic for ResultGridView.xaml
///
public partial class ResultGridView : UserControl
{
public class ResultObject
{
public Object V0 { get; set; }
public Object V1 { get; set; }
public Object V2 { get; set; }
public Object V3 { get; set; }
public Object V4 { get; set; }
public Object V5 { get; set; }
public Object V6 { get; set; }
public Object V7 { get; set; }
public Object V8 { get; set; }
public Object V9 { get; set; }
public Object V10 { get; set; }
public Object V11 { get; set; }
public Object V12 { get; set; }
public Object V13 { get; set; }
public Object V14 { get; set; }
}
public ResultGridView()
{
InitializeComponent();
Loaded += ResultGridView_Loaded;
}
private void ResultGridView_Loaded(object sender, RoutedEventArgs e)
{
var vm = DataContext as ResultGridViewVM;
var results = vm.Items;
List objects = new List();
if (results.Count > 0)
{
var model = results.First();
if (model.GetType().IsValueTypeOrString())
{
grid.Columns.Add(new DataGridTextColumn()
{
Header = "Values",
Binding = new Binding("V0"),
});
foreach (var item in results)
{
objects.Add(new ResultObject()
{
V0 = item,
});
}
}
else
{
int columnCount = 0;
//Generate columns
foreach (var prop in model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
var att = prop.GetCustomAttribute();
grid.Columns.Add(new DataGridTextColumn()
{
Header = att != null ? att.Description : prop.Name,
Binding = new Binding($"V{columnCount++}"),
});
}
foreach (var field in model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance))
{
var att = field.GetCustomAttribute();
grid.Columns.Add(new DataGridTextColumn()
{
Header = att != null ? att.Description : field.Name,
Binding = new Binding($"V{columnCount++}"),
});
}
//Generate cells
foreach (var item in results)
{
ResultObject obj = new ResultObject();
var properties = model.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();
var fields = model.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance).ToList();
int propCount = 0;
for (int i = 0; i < properties.Count; i++)
{
typeof(ResultObject).GetProperty($"V{i}").SetValue(obj, properties[i].GetValue(item));
propCount++;
}
for (int i = 0; i < fields.Count; i++)
{
typeof(ResultObject).GetProperty($"V{i + propCount}").SetValue(obj, fields[i].GetValue(item));
}
objects.Add(obj);
}
}
}
grid.ItemsSource = objects;
}
}
}