ExcelHelper/Views/Pages/ImportExcelPage.xaml

223 lines
11 KiB
Plaintext
Raw Normal View History

2024-10-14 08:41:15 +08:00
<Page
x:Class="ExcelHelper.Views.Pages.ImportExcelPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converter="clr-namespace:ExcelHelper.Converter"
2024-10-14 08:41:15 +08:00
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:ExcelHelper.Views.Pages"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:utils="clr-namespace:ExcelHelper.Utils"
2024-10-14 08:41:15 +08:00
xmlns:viewmodels="clr-namespace:ExcelHelper.Views.ViewModels"
Title="ImportExcelPage"
d:DataContext="{d:DesignInstance Type=viewmodels:ImportViewModel}"
d:DesignHeight="450"
d:DesignWidth="1200"
mc:Ignorable="d">
<Page.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<converter:ReBooleanToVisibilityConverter x:Key="ReBooleanToVisibilityConverter" />
2024-10-14 08:41:15 +08:00
<DataTemplate x:Key="Mask">
<Grid Background="#99424242">
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="20"
Foreground="White"
Text="拖拽到此处放开" />
</Grid>
</DataTemplate>
<DataTemplate x:Key="LoadingMask">
<Grid Background="#99424242">
<hc:CircleProgressBar
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="20"
Foreground="White"
IsIndeterminate="True"
Text="加载中" />
2024-10-14 08:41:15 +08:00
</Grid>
</DataTemplate>
</Page.Resources>
<Grid
AllowDrop="True"
DragEnter="Grid_DragEnter"
DragLeave="Grid_DragLeave"
Drop="Grid_Drop">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="800" />
<ColumnDefinition Width="370" MinWidth="370" />
</Grid.ColumnDefinitions>
<ContentPresenter
x:Name="DropFileMask"
Grid.Column="0"
Grid.ColumnSpan="2"
Panel.ZIndex="10"
Content="{Binding}"
2024-10-14 08:41:15 +08:00
ContentTemplate="{StaticResource Mask}"
Visibility="Collapsed" />
<ContentPresenter
x:Name="LoadingMask"
Grid.Column="0"
Grid.ColumnSpan="2"
Panel.ZIndex="10"
Content="{Binding}"
ContentTemplate="{StaticResource LoadingMask}"
Visibility="{Binding IsLoading, Converter={StaticResource Boolean2VisibilityConverter}}" />
2024-10-14 08:41:15 +08:00
<hc:TabControl Grid.Column="0" Margin="5,5,7,5">
<hc:TabItem Header="预览">
<DataGrid
2024-10-29 16:57:50 +08:00
x:Name="ExcelDataPreviewGrid"
AutoGenerateColumns="False"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
IsReadOnly="True"
ItemsSource="{Binding ExcelData, IsAsync=True}"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling" />
2024-10-14 08:41:15 +08:00
</hc:TabItem>
<hc:TabItem Header="列信息">
<DataGrid
AutoGenerateColumns="False"
IsReadOnly="True"
2024-10-29 16:57:50 +08:00
ItemsSource="{Binding TableColumns, IsAsync=True}">
<DataGrid.Columns>
2024-10-29 16:57:50 +08:00
<DataGridTextColumn Binding="{Binding ExcelColumnName}" Header="列名称" />
<DataGridTextColumn Binding="{Binding TableColumnName}" Header="生成表的列名称" />
2024-10-14 08:41:15 +08:00
</DataGrid.Columns>
</DataGrid>
</hc:TabItem>
</hc:TabControl>
<GridSplitter
Grid.Column="0"
Width="2"
Margin="0,5" />
2024-10-29 16:57:50 +08:00
<StackPanel Grid.Column="1"
Margin="5">
2024-10-14 08:41:15 +08:00
2024-10-29 16:57:50 +08:00
<GroupBox Padding="5">
<GroupBox.Header>
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="5,0"
VerticalAlignment="Center"
Text="参数配置" />
<Button Style="{StaticResource ButtonPrimary}"
VerticalAlignment="Center"
Command="{Binding ReLoadExcelCommand}"
Content="重新读取Excel" />
</StackPanel>
</GroupBox.Header>
<hc:SimpleStackPanel SnapsToDevicePixels="True">
<hc:SimpleStackPanel.Resources>
<Style TargetType="{x:Type hc:SimpleStackPanel}">
<Setter Property="Margin" Value="5,0" />
</Style>
</hc:SimpleStackPanel.Resources>
<hc:SimpleStackPanel Orientation="Horizontal">
<Label Content="指定的Sheet" />
<hc:ComboBox
MinWidth="60"
MaxWidth="180"
Margin="0"
ItemsSource="{Binding Sheets}"
SelectedValue="{Binding SelectedSheetName}" />
<Button
Margin="0"
VerticalAlignment="Center"
Command="{Binding ReadSheetsCommand}"
Content="刷新" />
</hc:SimpleStackPanel>
<hc:SimpleStackPanel Height="Auto" Orientation="Horizontal">
<Label Content="起始位置:" />
<hc:TextBox MinWidth="40" Text="{Binding StartCell}" />
<CheckBox Content="包含列头" IsChecked="{Binding UseHeaderRow}" />
</hc:SimpleStackPanel>
<hc:SimpleStackPanel Orientation="Horizontal">
<Label Content="结束位置:" />
<hc:TextBox MinWidth="40" Text="{Binding EndCell}" />
</hc:SimpleStackPanel>
<hc:SimpleStackPanel Orientation="Horizontal">
<Label>
<CheckBox Content="合并的单元格进行填充" IsChecked="{Binding FillMergedCells}" />
</Label>
</hc:SimpleStackPanel>
<hc:SimpleStackPanel Orientation="Horizontal">
<Label Content="最大读取行数:" />
<hc:NumericUpDown
MinWidth="40"
Minimum="0"
Maximum="300"
Value="{Binding MaxRow}" />
<TextBlock Margin="5,0" Text="预览时最大读取300行" VerticalAlignment="Center"/>
</hc:SimpleStackPanel>
<hc:SimpleStackPanel Width="Auto" Orientation="Horizontal">
<Label Content="当前文件路径:" />
<!--<hc:TextBox MinWidth="200" />-->
<hc:ComboBox
MaxWidth="200"
ItemsSource="{Binding ExcelFiles}"
SelectedValue="{Binding CurrentFilePath}" />
</hc:SimpleStackPanel>
<hc:SimpleStackPanel IsEnabled="False" Orientation="Horizontal">
<Label Content="Excel密码" />
<PasswordBox MinWidth="60" utils:PasswordBoxHelper.Password="{Binding ExcelPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<Button Content="?" ToolTip="未加密留空多个Excel如果不同密码请分批次导入" />
</hc:SimpleStackPanel>
2024-10-14 08:41:15 +08:00
</hc:SimpleStackPanel>
2024-10-29 16:57:50 +08:00
</GroupBox>
<GroupBox Header="数据库配置" Padding="5">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label Content="数据库类型"/>
<hc:ComboBox SelectedValuePath="Tag" SelectedValue="{Binding DbType}" MinWidth="100" >
<ComboBoxItem Tag="Sqlite" Content="Sqlite"/>
<ComboBoxItem Tag="SqlServer" Content="SqlServer"/>
<!--<ComboBoxItem Tag="MySql" Content="MySql/MariaDB"/>
<ComboBoxItem Tag="MongoDB" Content="MongoDB"/>
<ComboBoxItem Tag="PostgreSql" Content="PostgreSql"/>-->
</hc:ComboBox>
<CheckBox Content="加密连接" IsChecked="{Binding IsEncrypt}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<Label Content="地址:"/>
<hc:TextBox MinWidth="150" Text="{Binding DbServer}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="端口:"/>
<hc:TextBox MinWidth="50" Text="{Binding DbPort}" />
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal">
<Label Content="账号:"/>
<hc:TextBox MinWidth="100" Text="{Binding DbUser}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="密码:"/>
<PasswordBox MinWidth="100" utils:PasswordBoxHelper.Password="{Binding DbPassword, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="数据库:"/>
<hc:TextBox MinWidth="100" Text="{Binding DbName}" />
<Button Content="测试连接" Command="{Binding TestDbConnCommand}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="导入后的数据表名称:"/>
<hc:TextBox MinWidth="100" Text="" />
<Button Style="{StaticResource ButtonPrimary}" Content="导入数据"/>
</StackPanel>
</StackPanel>
</GroupBox>
</StackPanel>
2024-10-14 08:41:15 +08:00
</Grid>
</Page>