feat: 수조 DataGrid 표시

hhsung_work
HyungJune Kim 10 months ago
parent b61a0024fc
commit 92800c3171

@ -72,7 +72,7 @@ namespace SmartAquaViewer.DataAnalysis
{
RecordedTime = ts,
Tank = new WaterTank(
number: rand.Next(1, 6),
number: rand.Next(1, 4),
doValue: Math.Round(rand.NextDouble() * 5 + 5, 2),
ph: Math.Round(rand.NextDouble() * 2 + 6, 2),
orp: Math.Round(rand.NextDouble() * 200 + 100, 2),

@ -8,7 +8,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using SmartAquaViewer.DataAnalisys;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
namespace SmartAquaViewer
@ -27,8 +27,7 @@ namespace SmartAquaViewer
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var sampleData = WaterQualityVO.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 5), 10);
Datas.SetWaterQualityVO(sampleData);
}
}
}

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SmartAquaViewer.DataAnalisys;
using SmartAquaViewer.DataAnalysis;
namespace SmartAquaViewer.Model
{

@ -49,7 +49,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-rc.1.efcore.9.0.0" />
</ItemGroup>
<ItemGroup>

@ -24,9 +24,52 @@
SelectedValue="{Binding CurrentSystem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="20 20 20 40">
<ScrollViewer Grid.Row="1" Margin="20 20 20 40"
HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
HorizontalAlignment="Center">
<ItemsControl ItemsSource="{Binding TankGroups}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Margin="25 0" HorizontalAlignment="Center" >
<!-- 그룹 헤더: 수조 번호 -->
<TextBlock Text="{Binding Key, StringFormat=수조 {0}}"
FontSize="20" FontWeight="Bold" Foreground="White"
Margin="0 0 0 10"/>
<!-- Value(= ObservableCollection<WaterQualityVO>)로 DataGrid -->
<DataGrid ItemsSource="{Binding Value}"
AutoGenerateColumns="False"
CanUserAddRows="False"
IsReadOnly="True"
HeadersVisibility="Column"
IsHitTestVisible="True">
<DataGrid.Columns>
<!-- 측정 시각 -->
<DataGridTextColumn
Header="시간"
Binding="{Binding RecordedTime, StringFormat=\{0:yyyy-MM-dd HH:mm:ss\}}"/>
<!-- Tank 값들 -->
<DataGridTextColumn Header="수조" Binding="{Binding Tank.Number}"/>
<DataGridTextColumn Header="DO" Binding="{Binding Tank.DO, StringFormat=\{0:F2\}}"/>
<DataGridTextColumn Header="pH" Binding="{Binding Tank.PH, StringFormat=\{0:F2\}}"/>
<DataGridTextColumn Header="ORP" Binding="{Binding Tank.ORP, StringFormat=\{0:F0\}}"/>
<DataGridTextColumn Header="온도(℃)" Binding="{Binding Tank.Temperature, StringFormat=\{0:F1\}}"/>
<DataGridTextColumn Header="유량(m³/s)" Binding="{Binding Tank.FlowRate, StringFormat=\{0:F2\}}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<Grid Grid.Row="1" VerticalAlignment="Bottom">
<Button Name="btnVisibilityDown" Tag="down"

@ -12,7 +12,9 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Newtonsoft.Json.Linq;
using SmartAquaViewer.Classes;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
using SmartAquaViewer.ViewModel;
using static SmartAquaViewer.Model.Enums;
@ -29,6 +31,12 @@ namespace SmartAquaViewer.View
public MonitoringView()
{
InitializeComponent();
Loaded += MonitoringView_Loaded;
}
private void MonitoringView_Loaded(object sender, RoutedEventArgs e)
{
monitoringViewModel = this.DataContext as MonitoringViewModel;
monitoringViewModel.OnSystemChanged += MonitoringViewModel_OnSystemChanged;
}
@ -38,7 +46,7 @@ namespace SmartAquaViewer.View
switch (systemName)
{
case "Tank":
//SetTankData();
break;
case "Filter":
@ -52,28 +60,28 @@ namespace SmartAquaViewer.View
}
}
private void GetTankData()
private void SetTankData()
{
//var waterTanksGroup = Datas.GetWaterQualityVO().GroupBy(w => w.WaterTank.WaterTankNum);
var waterTanksGroup = Datas.GetWaterQualityVO().GroupBy(w => w.Tank.Number);
//foreach (var group in waterTanksGroup)
//{
// DataGrid dataGrid = new DataGrid();
// group.ToList()
foreach (var group in waterTanksGroup)
{
DataGrid dataGrid = new DataGrid();
// DataGridAutoBuilder.BuildColumnsFromType(dataGrid, group, new Dictionary<string, string>
// {
// { nameof(DataAnalisys.WaterQualityVO.Timestamp), "시간" },
// { nameof(DataAnalisys.WaterTank.DO), "DO센서 (mg/L)" },
// { nameof(DataAnalisys.WaterTank.PH), "pH센서" },
// { nameof(DataAnalisys.WaterTank.ORP), "ORP센서 (mV)" },
// { nameof(DataAnalisys.WaterTank.Temperature), "수온 (°C)" },
// { nameof(DataAnalisys.WaterTank.FlowRate), "유량 (m³/s)"}
// });
//}
var waterQualityList = group.ToList();
DataGridAutoBuilder.BuildColumnsFromType(dataGrid, waterQualityList, new Dictionary<string, string>
{
{ nameof(WaterQualityVO.RecordedTime), "시간" },
{ nameof(WaterQualityVO.Tank.DOValue), "DO센서 (mg/L)" },
{ nameof(WaterQualityVO.Tank.PH), "pH센서" },
{ nameof(WaterQualityVO.Tank.ORP), "ORP센서 (mV)" },
{ nameof(WaterQualityVO.Tank.Temperature), "수온 (°C)" },
{ nameof(WaterQualityVO.Tank.FlowRate), "유량 (m³/s)"}
}, "HH:mm:ss");
//spDataGrid.Children.Add(dataGrid);
}
}
}
}

@ -7,6 +7,8 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using SmartAquaViewer.Controls;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
namespace SmartAquaViewer.ViewModel
{

@ -10,6 +10,8 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using SmartAquaViewer.Controls;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
namespace SmartAquaViewer.ViewModel
{
@ -20,6 +22,10 @@ namespace SmartAquaViewer.ViewModel
public ObservableCollection<string> GraphTypes { get; }
public List<WaterQualityVO> WaterQualityList { get; }
public Dictionary<int, ObservableCollection<WaterQualityVO>> TankGroups { get; }
private string _selectedGraphType;
public string SelectedGraphType
{
@ -105,6 +111,17 @@ namespace SmartAquaViewer.ViewModel
IsOpenMode = true;
BtnVisibilityUp = Visibility.Collapsed;
WaterQualityList = WaterQualityVO.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 1), 10);
Datas.SetWaterQualityVO(WaterQualityList);
TankGroups = WaterQualityList
.GroupBy(x => x.Tank.Number) // 또는 x.Tank.Num
.OrderBy(g => g.Key)
.ToDictionary(
g => g.Key,
g => new ObservableCollection<WaterQualityVO>(
g.OrderBy(r => r.RecordedTime))
);
GraphTypes = new ObservableCollection<string>();
CurrentSystem = "Tank"; // Default system
SetGraphType();

Loading…
Cancel
Save