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; } } }