private void InitializeComponent() { AvaloniaXamlLoader.Load(this); this.FindControl <Button>("FullCheck").Click += async(sender, e) => { if ((Load?.Status ?? TaskStatus.Created) == TaskStatus.Running) { cts.Cancel(); } else { cts = new CancellationTokenSource(); Button FC = sender as Button; FC.Content = "Stop Full Check"; Load = Task.Run(LoadFullCheck, cts.Token); Page.Value = 0; Page.GetType()?.GetField("EventHandlers")?.SetValue(Page, null); Page.ValueChanged += (sender2, e2) => ChangeList(); await Task.Delay(200); ChangeList(); await Load; FC.Content = "Full Check"; } }; this.FindControl <Button>("Export").Click += async(sender, e) => { FullCheck header = new FullCheck(); foreach (System.Reflection.PropertyInfo prop in header.GetType().GetProperties()) { prop.SetValue(header, prop.Name); } IEnumerable <string> exportList = ((ArrayList)FullCheckData.Clone()).OfType <FullCheck>().Prepend(header).Select(x => string.Join(',', x.GetType().GetProperties().Select(y => y.GetValue(x).ToString()))).Distinct(); SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.DefaultExtension = "csv"; saveFileDialog.Filters.Add(new FileDialogFilter() { Name = "CSV", Extensions = new List <string>() { "csv" } }); string path = await saveFileDialog.ShowAsync(this); if (!string.IsNullOrWhiteSpace(path)) { await File.AppendAllLinesAsync(path, exportList); } }; Page = this.FindControl <NumericUpDown>("Page"); Max = this.FindControl <TextBlock>("Max"); }
private void ChangeList() { Controls resultList = this.FindControl <WrapPanel>("Results").Children; resultList.Clear(); GC.Collect(); IEnumerable <FullCheck> ConvertedList = ((ArrayList)FullCheckData.Clone()).OfType <FullCheck>().Distinct(); Page.Maximum = (ConvertedList.Count() / 20); if (Page.Maximum == 0) { Page.Maximum++; } Max.Text = Page.Maximum.ToString(); FullCheck header = new FullCheck(); foreach (System.Reflection.PropertyInfo prop in header.GetType().GetProperties()) { prop.SetValue(header, prop.Name); } AddRow(this.FindControl <Grid>("ResultsGrid").Children, header); foreach (FullCheck item in ConvertedList.Skip((Convert.ToInt32(Page.Value) - 1) * 20).Take(20)) { AddRow(resultList, item); } void AddRow(Controls list, FullCheck item) { Border border = new Border { BorderBrush = Brushes.Black, BorderThickness = new Thickness(1) }; list.Add(border); Grid grid = new Grid(); border.Child = grid; grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //1 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //3 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //5 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //7 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //9 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //11 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //13 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //15 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //17 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //19 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(120, GridUnitType.Pixel)); //21 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Auto)); //23 grid.ColumnDefinitions.Add(new ColumnDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); grid.RowDefinitions.Add(new RowDefinition(12, GridUnitType.Pixel)); int Column = 1; int Row = 1; int MaxColumn = 23; void AddText(string text) { TextBlock txt = new TextBlock { Text = text }; Grid.SetColumn(txt, Column); Grid.SetRow(txt, Row); grid.Children.Add(txt); Column += 2; if (Column > MaxColumn) { Row += 2; Column = 1; } } foreach (System.Reflection.PropertyInfo prop in item.GetType().GetProperties()) { AddText(prop.GetValue(item).ToString()); } } }