• WPF显示SQLITE数据(四)--分页显示


      目前使用的WPF CORE做的BOSS网站数据显示,是在DataGrid中一次性显示数据,这样如果数据量大了,会对系统有一定压力,所以一般需要分页进行显示,显示中我参考了网上的一些已由控件,加入我的程序中,达到了分页效果。

      因为目前.net 5已经整合了.net core 3和.net Framework的功能,所以估计以后的趋势WPF也会都使用net core类库了,但是在开发使用中,发现目前的WPF CORE中无法添加WPF窗体和控件,经过多次试验,可以修改项目的.csproj文件,将<Project Sdk="Microsoft.NET.Sdk">改为<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">,然后直接添加一个已经写好的xaml分页控件(网上下载的,如果自己开发,又需要许多时间),控件代码如下:

           

     1 <UserControl x:Class="WpfApp1.DataGridPage"
     2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     6              mc:Ignorable="d"  Background="Transparent">
     7     <UserControl.Resources>
     8         <!--每页{0}/共{0}条-->
     9         <Style x:Key="PageTextBlock1" TargetType="{x:Type TextBlock}">
    10             <Setter Property="VerticalAlignment" Value="Center" />
    11             <Setter Property="HorizontalAlignment" Value="Left" />
    12             <Setter Property="FontSize" Value="13" />
    13             <Setter Property="FontWeight" Value="Bold" />
    14         </Style>
    15         <!--首页上一页等-->
    16         <Style x:Key="PageTextBlock2" TargetType="{x:Type TextBlock}">
    17             <Setter Property="VerticalAlignment" Value="Center" />
    18             <Setter Property="HorizontalAlignment" Value="Left" />
    19             <Setter Property="Margin" Value="0,10,0,0" />
    20             <Setter Property="Width" Value="40" />
    21             <Setter Property="Height" Value="23" />
    22             <Setter Property="FontSize" Value="13" />
    23             <Setter Property="Cursor" Value="Hand" />
    24             <Style.Triggers>
    25                 <Trigger Property="IsMouseOver" Value="True">
    26                     <Setter Property="Foreground" Value="#FF000000" />
    27                     <Setter Property="FontWeight" Value="Bold" />
    28                 </Trigger>
    29             </Style.Triggers>
    30         </Style>
    31 
    32     </UserControl.Resources>
    33     <Grid>
    34         <Border CornerRadius="3" Background="Transparent" BorderBrush="#01544A" BorderThickness="1">
    35             <Grid HorizontalAlignment="Stretch" Margin="5 0 1 0" VerticalAlignment="Top" Width="Auto" Height="25">
    36                 <Grid.ColumnDefinitions>
    37                     <ColumnDefinition Width="100"/>
    38                     <ColumnDefinition Width="300*" MinWidth="300"/>
    39                 </Grid.ColumnDefinitions>
    40                 <TextBlock Name="tbkRecords" Grid.Column="0" Style="{StaticResource PageTextBlock1}" Foreground="#01544A" Visibility="Visible" />
    41                 <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Column="1">
    42                     <Grid>
    43                         <Grid.RowDefinitions >
    44                             <RowDefinition Height="30"></RowDefinition>
    45                         </Grid.RowDefinitions>
    46                         <Grid.ColumnDefinitions>
    47                             <ColumnDefinition Width="50"/>
    48                             <ColumnDefinition Width="50"/>
    49                             <ColumnDefinition Width="120*"/>
    50                             <ColumnDefinition Width="50"/>
    51                             <ColumnDefinition Width="30"/>
    52                         </Grid.ColumnDefinitions>
    53                         <TextBlock Grid.Column="0" Name="btnFirst" Text="  首页" IsEnabled="False" Style="{StaticResource PageTextBlock2}" MouseDown="btnFirst_MouseDown"/>
    54                         <TextBlock Grid.Column="1" Name="btnPrev" Text="上一页" IsEnabled="False" Style="{StaticResource PageTextBlock2}" MouseDown="btnPrev_MouseDown" />
    55                         <Grid Grid.Column="2" Name="grid" Visibility="Visible" >
    56                             <TextBlock Text=""    Style="{StaticResource PageTextBlock2}" Width="15" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="0"></TextBlock>
    57                             <TextBox Width="30" Name="page" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"></TextBox>
    58                             <TextBlock HorizontalAlignment="Left" Width="60" VerticalAlignment="Bottom" Name="countPage" Text="页/共页"  Style="{StaticResource PageTextBlock2}" Margin="55,0,0,0"></TextBlock>
    59                             <Button Name="btnGO" Content="GO"  Width="25" Height="20"  VerticalAlignment="Center" Margin="115,0,10,0" Click="btnGO_Click"></Button>
    60                         </Grid>
    61                         <TextBlock  Grid.Column="3" Name="btnNext" Text="下一页" IsEnabled="False" Style="{StaticResource PageTextBlock2}"  MouseDown="btnNext_MouseDown" Height="22" Margin="0,8,0,0"  />
    62                         <TextBlock  Grid.Column="4" Name="btnLast" Text="末页" IsEnabled="False" Style="{StaticResource PageTextBlock2}" MouseDown="btnLast_MouseDown"/>
    63                         
    64                     </Grid>
    65                 </StackPanel>
    66             </Grid>
    67         </Border>
    68     </Grid>
    69 </UserControl>

    主窗体的调用代码为:

      1 using System.Data.SQLite;
      2 using System.IO;
      3 using System;
      4 using System.Windows;
      5 using System.Windows.Input;
      6 using System.Windows.Media;
      7 using System.Windows.Media.Imaging;
      8 using System.Windows.Navigation;
      9 using System.Windows.Shapes;
     10 using System.Windows.Controls;
     11 using System.Diagnostics;
     12 using System.Data;
     13 
     14 namespace WpfApp1
     15 {
     16     /// <summary>
     17     /// Interaction logic for MainWindow.xaml
     18     /// </summary>
     19     public partial class MainWindow : Window
     20     {
     21         public MainWindow()
     22         {
     23             InitializeComponent();
     24         }
     25 
     26         // 数据库文件夹
     27         static string DbPath = @"E:mycsampleBossinx64Debug
    et5.0-windows";
     28         System.Data.DataTable Dt = new System.Data.DataTable();
     29 
     30         //与指定的数据库(实际上就是一个文件)建立连接
     31         private static SQLiteConnection CreateDatabaseConnection(string dbName = null)
     32         {
     33             if (!string.IsNullOrEmpty(DbPath) && !Directory.Exists(DbPath))
     34                 Directory.CreateDirectory(DbPath);
     35             dbName = dbName == null ? "mytest.db" : dbName;
     36             var dbFilePath = System.IO.Path.Combine(DbPath, dbName);
     37             return new SQLiteConnection("DataSource = " + dbFilePath+"; Pooling = true; FailIfMissing = false");
     38         }
     39 
     40         // 使用全局静态变量保存连接
     41         private static SQLiteConnection connection = CreateDatabaseConnection();
     42 
     43         // 判断连接是否处于打开状态
     44         private static void Open(SQLiteConnection connection)
     45         {
     46             if (connection.State != System.Data.ConnectionState.Open)
     47             {
     48                 connection.Open();
     49             }
     50         }
     51 
     52         public static void ExecuteNonQuery(string sql)
     53         {
     54             // 确保连接打开
     55             Open(connection);
     56             using (var tr = connection.BeginTransaction())
     57             {
     58                 using (var command = connection.CreateCommand())
     59                 {
     60                     command.CommandText = sql;
     61                     command.ExecuteNonQuery();
     62                 }
     63                 tr.Commit();
     64             }
     65         }
     66 
     67         public static SQLiteDataReader ExecuteQuery(string sql)
     68         {
     69             // 确保连接打开
     70             Open(connection);
     71             using (var tr = connection.BeginTransaction())
     72             {
     73                 using (var command = connection.CreateCommand())
     74                 {
     75                     command.CommandText = sql;
     76                     // 执行查询会返回一个SQLiteDataReader对象
     77                     var reader = command.ExecuteReader();
     78                     tr.Commit();
     79                     return reader;
     80                     //reader.Read()方法会从读出一行匹配的数据到reader中。注意:是一行数据。
     81                     //while (reader.Read())
     82                     //{
     83                     //    // 有一系列的Get方法,方法的参数是列数。意思是获取第n列的数据,转成Type返回。
     84                     //    // 比如这里的语句,意思就是:获取第0列的数据,转成int值返回。
     85                     //    var time = reader.GetInt64(0);
     86                     //}
     87                 }
     88                 //tr.Commit();
     89             }
     90         }
     91 
     92         private static void DeleteDatabase(string dbName)
     93         {
     94             var path = System.IO.Path.Combine(DbPath, dbName);
     95             connection.Close();
     96 
     97             // 置空,手动GC,并等待GC完成后执行文件删除。
     98             connection = null;
     99             GC.Collect();
    100             GC.WaitForPendingFinalizers();
    101             File.Delete(path);
    102         }
    103 
    104         private void Hyperlink_Click(object sender, RoutedEventArgs e)
    105         {
    106             System.Windows.Documents.Hyperlink link = (System.Windows.Documents.Hyperlink)e.OriginalSource;
    107             //Process.Start("IEXPLORE.EXE",link.NavigateUri.AbsoluteUri);
    108             string url = link.NavigateUri.AbsoluteUri;
    109             Process p = new Process();
    110             p.StartInfo.FileName = "cmd.exe";
    111             p.StartInfo.UseShellExecute = false;    //不使用shell启动
    112             p.StartInfo.RedirectStandardInput = true;//喊cmd接受标准输入
    113             p.StartInfo.RedirectStandardOutput = false;//不想听cmd讲话所以不要他输出
    114             p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
    115             p.StartInfo.CreateNoWindow = true;//不显示窗口
    116             p.Start();
    117 
    118             //向cmd窗口发送输入信息 后面的&exit告诉cmd运行好之后就退出
    119             p.StandardInput.WriteLine("start " + url + "&exit");
    120             p.StandardInput.AutoFlush = true;
    121             p.WaitForExit();//等待程序执行完退出进程
    122             p.Close();
    123         }
    124 
    125         private void button_Click(object sender, RoutedEventArgs e)
    126         {
    127             SQLiteDataReader sr = ExecuteQuery("select id,title,url from one_level order by id");
    128             if (sr != null)
    129             {                
    130                 Dt.Load(sr);
    131                 gridpage.ShowPages(dataGrid, Dt, 10);                
    132                 //dataGrid.ItemsSource = Dt.DefaultView;
    133             }
    134         }
    135 
    136         private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
    137         {
    138             e.Row.Header = e.Row.GetIndex() + 1;
    139         }
    140 
    141         private void dataGrid_UnLoadingRow(object sender, DataGridRowEventArgs e)
    142         {
    143             dataGrid_LoadingRow(sender, e);
    144             if (dataGrid.Items != null)
    145             {
    146                 for (int i = 0; i < dataGrid.Items.Count; i++)
    147                 {
    148                     try
    149                     {
    150                         DataGridRow row = dataGrid.ItemContainerGenerator.ContainerFromIndex(i) as DataGridRow;
    151                         if (row != null)
    152                         {
    153                             row.Header = (i + 1).ToString();
    154                         }
    155                     }
    156                     catch { }
    157                 }
    158             }
    159         }
    160 
    161         private void Window_Loaded(object sender, RoutedEventArgs e)
    162         {
    163             //dataGrid.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid_LoadingRow);
    164             //dataGrid.UnloadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid_UnLoadingRow);
    165         }
    166     }
    167 }

    最后可以看到分页后的效果。

    参考:https://www.cnblogs.com/xiamojinnian/p/4287186.html

  • 相关阅读:
    IP寻址方式三
    IP通信基础4
    IP通信基础3
    IP通信基础2
    IP通信基础 1
    IP通信基础
    IP通信原理第二周
    设备选型
    常用virsh命令记录
    [转]enable spice html5 console access in openstack kilo(centos)
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/15451842.html
Copyright © 2020-2023  润新知