Добавьте файлы проекта.

This commit is contained in:
FrigaT
2026-01-05 00:29:19 +03:00
committed by FrigaT
parent 76a09d80d4
commit d0653c2098
105 changed files with 6729 additions and 0 deletions

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