添加到从Excel导入的对话框

This commit is contained in:
2025-07-04 13:41:50 +08:00
parent 02eab6ecf0
commit 7995b46586
5 changed files with 483 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
<ui:ContentDialog x:Class="PMSWPF.Views.Dialogs.ImportExcelDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:vmd="clr-namespace:PMSWPF.ViewModels.Dialogs"
Title="从Excel导入"
CloseButtonText="取消"
DefaultButton="Primary"
PrimaryButtonText="导入"
d:DataContext="{d:DesignInstance vmd:ImportExcelDialogViewModel}"
mc:Ignorable="d"
AllowDrop="True"
DragEnter="Dialog_DragEnter"
Drop="Dialog_Drop">
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<TextBlock HorizontalAlignment="Center"
Text="拖放Excel文件到此处或选择文件" />
<Grid Margin="0,10,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"
VerticalAlignment="Center"
Text="{Binding FilePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Grid.Column="1"
Margin="5,0,0,0"
Click="SelectFile_Click"
Content="选择文件" />
</Grid>
</StackPanel>
<DataGrid Grid.Row="1"
Margin="0,10,0,0"
ItemsSource="{Binding VariableData}"
AutoGenerateColumns="False"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="名称" Binding="{Binding Name}" />
<DataGridTextColumn Header="数据类型" Binding="{Binding DataType}" />
<DataGridTextColumn Header="S7地址" Binding="{Binding S7Address}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</ui:ContentDialog>

View File

@@ -0,0 +1,67 @@
using Microsoft.Win32;
using PMSWPF.ViewModels.Dialogs;
using System.IO;
using System.Windows;
using iNKORE.UI.WPF.Modern.Controls;
namespace PMSWPF.Views.Dialogs;
public partial class ImportExcelDialog : ContentDialog
{
public ImportExcelDialog(ImportExcelDialogViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
private void Dialog_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effects = DragDropEffects.Copy;
}
else
{
e.Effects = DragDropEffects.None;
}
}
private void Dialog_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files.Length > 0)
{
string extension = Path.GetExtension(files[0]);
if (extension.Equals(".xls", StringComparison.OrdinalIgnoreCase) ||
extension.Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
if (DataContext is ImportExcelDialogViewModel viewModel)
{
viewModel.FilePath = files[0];
}
}
else
{
// MessageBox.Show("Please drop a valid Excel file (.xls or .xlsx).", "Invalid File Type", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}
private void SelectFile_Click(object sender, RoutedEventArgs e)
{
var openFileDialog = new OpenFileDialog
{
Filter = "Excel Files (*.xlsx)|*.xlsx|All files (*.*)|*.*"
};
if (openFileDialog.ShowDialog() == true)
{
if (DataContext is ImportExcelDialogViewModel viewModel)
{
viewModel.FilePath = openFileDialog.FileName;
}
}
}
}