Добавьте файлы проекта.
This commit is contained in:
75
SQLVision.Visualizers/Visualizers/TableVisualizer.cs
Normal file
75
SQLVision.Visualizers/Visualizers/TableVisualizer.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using Microsoft.UI.Xaml;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using Microsoft.UI.Xaml.Media;
|
||||
using SQLVision.Core.Enums;
|
||||
using SQLVision.Core.Models;
|
||||
using SQLVision.Visualizers.Interfaces;
|
||||
using System.Data;
|
||||
|
||||
namespace SQLVision.Visualizers.Visualizers;
|
||||
|
||||
public class TableVisualizer : IVisualizer
|
||||
{
|
||||
public FrameworkElement Visualize(DataTable data, OutputDefinition definition)
|
||||
{
|
||||
var listView = new ListView
|
||||
{
|
||||
ItemsSource = data.DefaultView,
|
||||
SelectionMode = ListViewSelectionMode.None,
|
||||
IsItemClickEnabled = false,
|
||||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||
VerticalAlignment = VerticalAlignment.Stretch
|
||||
};
|
||||
|
||||
// Автоматическое создание колонок
|
||||
listView.ItemTemplate = CreateDataTemplate(data);
|
||||
|
||||
var scrollViewer = new ScrollViewer
|
||||
{
|
||||
Content = listView,
|
||||
HorizontalScrollBarVisibility = ScrollBarVisibility.Auto,
|
||||
VerticalScrollBarVisibility = ScrollBarVisibility.Auto,
|
||||
MaxHeight = 600
|
||||
};
|
||||
|
||||
return scrollViewer;
|
||||
}
|
||||
|
||||
private DataTemplate CreateDataTemplate(DataTable data)
|
||||
{
|
||||
var gridFactory = new FrameworkElementFactory(typeof(Grid));
|
||||
|
||||
// Создаем колонки
|
||||
foreach (DataColumn column in data.Columns)
|
||||
{
|
||||
var columnDefinition = new ColumnDefinition();
|
||||
gridFactory.AppendChild(columnDefinition);
|
||||
}
|
||||
|
||||
// Создаем строку с текстовыми блоками
|
||||
var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel));
|
||||
stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
|
||||
|
||||
foreach (DataColumn column in data.Columns)
|
||||
{
|
||||
var borderFactory = new FrameworkElementFactory(typeof(Border));
|
||||
borderFactory.SetValue(Border.BorderThicknessProperty, new Thickness(0, 0, 1, 1));
|
||||
borderFactory.SetValue(Border.BorderBrushProperty, new SolidColorBrush(Colors.LightGray));
|
||||
|
||||
var textBlockFactory = new FrameworkElementFactory(typeof(TextBlock));
|
||||
textBlockFactory.SetBinding(TextBlock.TextProperty,
|
||||
new Microsoft.UI.Xaml.Data.Binding { Path = new PropertyPath($"[{column.ColumnName}]") });
|
||||
textBlockFactory.SetValue(TextBlock.MarginProperty, new Thickness(4));
|
||||
textBlockFactory.SetValue(TextBlock.VerticalAlignmentProperty, VerticalAlignment.Center);
|
||||
|
||||
borderFactory.AppendChild(textBlockFactory);
|
||||
stackPanelFactory.AppendChild(borderFactory);
|
||||
}
|
||||
|
||||
gridFactory.AppendChild(stackPanelFactory);
|
||||
|
||||
return new DataTemplate { VisualTree = gridFactory };
|
||||
}
|
||||
|
||||
public bool CanVisualize(OutputType type) => type == OutputType.Table;
|
||||
}
|
||||
Reference in New Issue
Block a user