using Elwig.Helpers; using System; using System.Collections.Generic; using System.Data.Common; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; namespace Elwig.Windows { public partial class QueryWindow : Window { private ICommand? _enterCommand; public ICommand EnterCommand => _enterCommand ??= new ActionCommand(async () => { await ExecuteQuery(); }); public QueryWindow() { InitializeComponent(); } private async void QueryButton_Click(object sender, RoutedEventArgs evt) { await ExecuteQuery(); } private async Task ExecuteQuery() { try { await ExecuteQuery(QueryInput.Text); } catch (Exception e) { MessageBox.Show(e.Message, "Fehler beim Ausführen", MessageBoxButton.OK, MessageBoxImage.Error); } } private async Task ExecuteQuery(string sqlQuery) { var rows = new List(); IList header; using (var cnx = await AppDbContext.ConnectAsync()) { var cmd = cnx.CreateCommand(); cmd.CommandText = sqlQuery; using var reader = await cmd.ExecuteReaderAsync(); header = await reader.GetColumnSchemaAsync(); while (await reader.ReadAsync()) { var values = new object[reader.FieldCount]; reader.GetValues(values); rows.Add(values); } } var styleRight = new Style(); styleRight.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right)); DataList.Columns.Clear(); for (int i = 0; i < header.Count; i++) { var h = header[i]; DataList.Columns.Add(new DataGridTextColumn { Header = h.ColumnName.Replace("_", "__"), Binding = new Binding($"[{i}]"), CellStyle = (h.DataTypeName == "INTEGER" || h.DataTypeName == "REAL") ? styleRight : null, }); } DataList.ItemsSource = rows; } } }