187 lines
5.8 KiB
C#
187 lines
5.8 KiB
C#
using Microsoft.Win32;
|
||
using Sunny.UI;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Text;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Data;
|
||
using System.Windows.Documents;
|
||
using System.Windows.Input;
|
||
using System.Windows.Media;
|
||
using System.Windows.Media.Imaging;
|
||
using System.Windows.Navigation;
|
||
using System.Windows.Shapes;
|
||
namespace 头罩视野.Views
|
||
{
|
||
/// <summary>
|
||
/// RecordDate.xaml 的交互逻辑
|
||
/// </summary>
|
||
///
|
||
|
||
public partial class RecordDate : Page
|
||
|
||
{
|
||
// 数据存储列表
|
||
private List<dynamic> LeftEyeDataList = new List<dynamic>();
|
||
private List<dynamic> RightEyeDataList = new List<dynamic>();
|
||
|
||
// 长按清除用
|
||
private bool _isClearPressed = false;
|
||
private Thread _clearThread;
|
||
public RecordDate()
|
||
{
|
||
InitializeComponent();
|
||
DynamicHeader();
|
||
// 2. 调用(名字和上面的变量一致)
|
||
AddDataRow(dataGrid1, LeftEyeDataList, 64);
|
||
AddDataRow(dataGrid2, RightEyeDataList, 64);
|
||
// 测试数据
|
||
/// <summary>
|
||
/// 给表格添加一行数据(自动存起来,用于保存)
|
||
/// </summary>
|
||
/// <param name="dg">目标表格</param>
|
||
/// <param name="dataList">数据存储列表</param>
|
||
/// <param name="channelCount">通道数量 64/32</param>
|
||
void AddDataRow(DataGrid dg, List<dynamic> dataList, int channelCount)
|
||
{
|
||
// 创建一行数据
|
||
dynamic row = new System.Dynamic.ExpandoObject();
|
||
var dict = (IDictionary<string, object>)row;
|
||
|
||
// 固定列
|
||
dict["Id"] = dataList.Count + 1;
|
||
dict["Time"] = DateTime.Now.ToString("HH:mm:ss");
|
||
dict["Date"] = DateTime.Now.ToString("yyyy-MM-dd");
|
||
|
||
// 通道列(Ch1 ~ Ch64)
|
||
for (int i = 1; i <= channelCount; i++)
|
||
{
|
||
dict[$"Ch{i}"] = 0; // 这里你可以替换成真实数据
|
||
}
|
||
|
||
// 存起来 + 显示
|
||
dataList.Add(row);
|
||
dg.Items.Add(row);
|
||
}
|
||
}
|
||
//动态生成表头
|
||
void DynamicHeader()
|
||
{
|
||
// 2. 循环生成 64 个 ch 列
|
||
for (int i = 1; i <= 64; i++)
|
||
{
|
||
dataGrid1.Columns.Add(new DataGridTextColumn
|
||
{
|
||
Header = $"ch.{i}",
|
||
Binding = new System.Windows.Data.Binding($"Ch{i}")
|
||
});
|
||
dataGrid2.Columns.Add(new DataGridTextColumn
|
||
{
|
||
Header = $"ch.{i}",
|
||
Binding = new System.Windows.Data.Binding($"Ch{i}")
|
||
});
|
||
}
|
||
}
|
||
|
||
//#endregion
|
||
|
||
// 保存左眼
|
||
private void btnSaveLeft_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
||
}
|
||
|
||
// 保存右眼
|
||
private void btnSaveRight_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
SaveToCsv(RightEyeDataList, $"右眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
||
}
|
||
|
||
private void SaveToCsv(List<dynamic> dataList, string defaultFileName)
|
||
{
|
||
if (dataList == null || dataList.Count == 0)
|
||
{
|
||
MessageBox.Show("无数据可保存");
|
||
return;
|
||
}
|
||
|
||
// 打开文件夹选择框
|
||
var folderDialog = new OpenFolderDialog();
|
||
if (folderDialog.ShowDialog() != true)
|
||
return;
|
||
|
||
string folder = folderDialog.FolderName;
|
||
string path = System.IO.Path.Combine(folder, defaultFileName);
|
||
|
||
// 写入 CSV
|
||
using (var sw = new StreamWriter(path, false, Encoding.UTF8))
|
||
{
|
||
var first = (IDictionary<string, object>)dataList[0];
|
||
sw.WriteLine(string.Join(",", first.Keys));
|
||
|
||
foreach (var item in dataList)
|
||
{
|
||
var dict = (IDictionary<string, object>)item;
|
||
sw.WriteLine(string.Join(",", dict.Values));
|
||
}
|
||
}
|
||
|
||
MessageBox.Show("保存成功:\n" + path);
|
||
}
|
||
|
||
|
||
private void btnClear_MouseDown(object sender, MouseButtonEventArgs e)
|
||
{
|
||
_isClearPressed = true;
|
||
_clearThread = new Thread(() =>
|
||
{
|
||
Thread.Sleep(500); // 长按1秒触发
|
||
if (_isClearPressed)
|
||
{
|
||
Application.Current.Dispatcher.Invoke(() => ClearAllData());
|
||
}
|
||
});
|
||
_clearThread.Start();
|
||
}
|
||
// 清除所有数据
|
||
private void ClearAllData()
|
||
{
|
||
LeftEyeDataList.Clear();
|
||
dataGrid1.Items.Clear();
|
||
|
||
RightEyeDataList.Clear();
|
||
dataGrid2.Items.Clear();
|
||
|
||
MessageBox.Show("数据已清除");
|
||
}
|
||
|
||
private void btnClear_MouseUp(object sender, MouseButtonEventArgs e)
|
||
{
|
||
_isClearPressed = false;
|
||
_clearThread?.Join(100); // 等待线程结束最多100毫秒,然后强制结束
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
private void GoHome(object s, RoutedEventArgs e) => NavigationService.Content = null;
|
||
private void GoTest(object s, RoutedEventArgs e) => NavigationService.Content = new Views.PageTest();
|
||
private void GoRecord(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordDate();
|
||
private void GoView(object s, RoutedEventArgs e) => NavigationService.Content = new Views.RecordPage();
|
||
|
||
//NavigationService.Navigate(new Views.RecordDate()); 页面相互跳转
|
||
}
|
||
}
|