alielie
2025-03-04 2b1a6417285597bc58ef28aa3f01aeee2532cd19
HMI.DataViewer/DataViewer.xaml.cs
@@ -2,6 +2,7 @@
using HMI.Core.Util;
using HMI.DataViewer.Entity;
using HMI.UI.Util;
using Panuon.WPF.UI;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -10,7 +11,9 @@
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Media;
namespace HMI.DataViewer
{
@@ -97,7 +100,7 @@
            }
            DataBase_Setting setting = Map[program];
            string fields = string.Join(",", Datas?.Select(d => $"[{d.Key}]").ToList());
@@ -116,7 +119,7 @@
                conditon += $" AND {timeCol} < '{endTimeInput.Text}'";
            }
            conditon = string.IsNullOrEmpty(conditon) ? string.Empty : $" WHERE {conditon}";
            SqliteHelper helper = null;
            string sql = string.Empty;
            try
@@ -124,14 +127,13 @@
                helper = new SqliteHelper(setting.DBFilePath);
                sql = $"SELECT {fields} FROM {setting.TableName} {conditon}";
                DataTable dt = helper.GetDataTable(sql);
                HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
                dataTable.ItemsSource = dt.DefaultView;
            }
            catch (Exception ex)
            {
                log.Error($"Select Data Failed. SQL: {sql}", ex);
                ToastHelper.Error(Window.GetWindow(this), $"查询失败!{ex.Message}");
            }
            finally
            {
@@ -191,6 +193,7 @@
                setting?.Condition?.Select(d => new QueryData { Key = d.Key, Name = d.Desc, Condition = "=" }).ToList());
            var temp = dataTable.Columns[0];
            HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
            dataTable.Columns.Clear();
            dataTable.Columns.Add(temp);
            foreach (var data in Datas)
@@ -204,11 +207,55 @@
            DataGridTextColumn textColumn = new DataGridTextColumn
            {
                Header = header,
                Binding = new Binding(bindingPath)
                ,
                Binding = new Binding(bindingPath),
                Width = new DataGridLength(1, DataGridLengthUnitType.Star)
            };
            dataTable.Columns.Add(textColumn);
        }
        private void dataTable_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            // 获取点击的元素
            DependencyObject dep = (DependencyObject)e.OriginalSource;
            // 遍历找到 DataGridColumnHeader
            while (dep != null && !(dep is DataGridColumnHeader) && !(dep is DataGridRow))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }
            HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
            if (dep is DataGridColumnHeader columnHeader)
            {
                // 获取列索引
                int columnIndex = columnHeader.Column.DisplayIndex;
                // 清除已有选择
                dataTable.SelectedCells.Clear();
                // 遍历所有行,选中该列的所有单元格
                foreach (var item in dataTable.Items)
                {
                    DataGridCellInfo cellInfo = new DataGridCellInfo(item, columnHeader.Column);
                    dataTable.SelectedCells.Add(cellInfo);
                }
                HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, columnHeader.Column);
                e.Handled = true; // 防止默认行为
            }
            else if (dep is DataGridRow row)
            {
                // 清除已有选择
                dataTable.SelectedCells.Clear();
                dataTable.SelectedItem = row.Item;
                e.Handled = true;
            }
        }
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            DataGridColumn column = HMI.UI.DpUtil.DataGridHelper.GetSelectedColumn(dataTable);
        }
    }
}