当前位置: 首页 > news >正文

快速分页wpf

/*没有在xaml设置上下文window.context是因为 命名空间一直对应不上  所以在xaml.cs
里面绑定*/
<Window x:Class="DataGrid.views.MainWindow"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:local="clr-namespace:DataGrid"xmlns:AutoGrid="clr-namespace:WpfAutoGrid"xmlns:viewmodels="clr-namespace:DataGrid.viewmodels"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><AutoGrid:AutoGrid ColumnCount="2" RowCount="2"  Rows="5*,*" Columns="*,*" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"><DataGrid Grid.ColumnSpan="2" ItemsSource="{Binding Itemsview}"></DataGrid><TextBox HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Text="{Binding Pagenum}" ></TextBox><Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Command="{Binding NextPageCommand}">Next</Button></AutoGrid:AutoGrid></Grid>
</Window>

using Bogus;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Data;
using Bogus;
using System.Collections.ObjectModel;namespace DataGrid.viewmodels
{public class student   //类变量要是属性getset{public int Id { get; set; }public string Name { get; set; }public double Score { get; set; }}public class StudentDataGenerator{public static ObservableCollection<student> GenerateStudents(int count){var fakeStudents = new Faker<student>().RuleFor(s => s.Id, f => f.IndexGlobal + 1)  // ID从1开始.RuleFor(s => s.Name, f => f.Name.FullName())    // 随机姓名.RuleFor(s => s.Score, f => f.Random.Double(0, 100)) // 0-100的随机分数.Generate(count);  // 生成指定数量的学生return new ObservableCollection<student>(fakeStudents);}}  /*bogus生成数据*/public partial class DataControl:ObservableObject /*这里一定要partial*/{private CollectionView _itemsview;private const int _pagesize = 10;private int _pagenum = 1;public CollectionView Itemsview { get { return _itemsview; } }public int Pagenum{get { return _pagenum; }set { SetProperty(ref _pagenum, value); Itemsview?.Refresh(); }}public int TotalPages => (int)Math.Ceiling(Students.Count / (double)_pagesize);[ObservableProperty]ObservableCollection<student> _students;[RelayCommand]public void NextPage(){if (_pagenum < TotalPages) // 如果还有下一页{Pagenum++;   //这里一定只能改属性  }}[RelayCommand]     //relaycommand生成的命令会在函数后面加上commandpublic void PrevPage(){if (_pagenum > 1) // 如果不是第1页{Pagenum--;}}//原理就是_itemsview匹配数据 过滤之后留下页码是1的内容 返回true的内容会被存入_itemsviewpublic DataControl(ObservableCollection<student> stus) //有参构造函数传数据{this._students = stus;    //这里要用observablecollection 不能用enumerable_itemsview = (CollectionView)CollectionViewSource.GetDefaultView(this._students);_itemsview.Filter = (item) =>{var index = Students.IndexOf((student)item); int itemPage = (index / _pagesize) + 1;return itemPage == Pagenum; // 只显示当前页的数据;};}}}

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;
using DataGrid.viewmodels;namespace DataGrid.views
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new DataControl(StudentDataGenerator.GenerateStudents(36));}}
}//xaml不好绑定viewmodel  就只能到cs里面绑定了  this.datacontext = new ........
//坏处就是xaml不会有提示

sqlsugar操作

using SqlSugar;
using System;public static class IntDbHelper
{private static SqlSugarScope Connection => new SqlSugarScope(new ConnectionConfig(){ConnectionString = "Data Source=./data.db",DbType = DbType.Sqlite,IsAutoCloseConnection = true});// -------------------- 针对int值的操作 --------------------// 插入数据(返回新增的ID)public static int Insert(string tableName, Dictionary<string, object> values){return Connection.Insertable(values).AS(tableName).ExecuteReturnIdentity();}// 查询数据(返回单个int值)public static int GetInt(string tableName, string field, int id){return Connection.Queryable<dynamic>().AS(tableName).Where($"Id = {id}").Select(field).First();}// 更新数据(更新指定int字段)public static bool UpdateInt(string tableName, int id, string field, int newValue){return Connection.Updateable<dynamic>().AS(tableName).SetColumns($"{field} = {newValue}").Where($"Id = {id}").ExecuteCommand() > 0;}// 删除数据(根据int ID)public static bool Delete(string tableName, int id){return Connection.Deleteable<dynamic>().AS(tableName).Where($"Id = {id}").ExecuteCommand() > 0;}
}

 反射和linq也能分页

object myObject = new MyClass();

PropertyInfo propertyInfo = myObject.GetType().GetProperty("Name");

 

if (propertyInfo != null)

{

    object value = propertyInfo.GetValue(myObject);

    Console.WriteLine($"属性值: {value}");

}

1建议一次只拿一个对象的属性 对象列表用循环多次读取

2GetValue是属性拿对应的值  所以要传对象

 

http://www.lryc.cn/news/583973.html

相关文章:

  • 微软云语音识别ASR示例Demo
  • 论文笔记(LLM distillation):Distilling Step-by-Step!
  • Flutter跨平台开发全解析
  • libimagequant 在 mac 平台编译双架构
  • 2025.07.09华为机考真题解析-第一题100分
  • SPGAN: Siamese projection Generative Adversarial Networks
  • 如何发现 Redis 中的 BigKey?
  • 速盾:高防CDN开发中的常见问题?
  • CANFD记录仪设备在无人驾驶快递车的应用
  • 数据同步平台部署指南
  • WebUI自动化知识点总结-基于Java语言
  • 解锁医疗新视界:医患共决策时间轴AI可视化工具
  • Flutter多线程机制深度解析
  • 【计算机基础理论知识】C++篇(二)
  • 利萨如图形详解:原理与Python动态绘制
  • 配置双网卡Linux主机作为路由器(连接NAT网络和仅主机模式网络)
  • pharokka phold--快速噬菌体注释工具
  • FeatherScan v4.0 – 适用于Linux的全自动内网信息收集工具
  • 基于大数据的电力系统故障诊断技术研究
  • LINUX710 MYSQL
  • 大数据学习6:Sqoop数据迁移工具
  • linux-用户与用户组管理
  • 时序数据库InfluxDB
  • 初学者对编译和链接的学习笔记(含预编译详解)
  • 量子计算能为我们做什么?
  • Linux之Tomcat WEB核心摘要
  • Unity3D iOS闪退问题解决方案
  • C++交叉编译工具链制作以及QT交叉编译环境配置
  • 安全访问云端内部应用:用frp的stcp功能解决SSH转发的痛点
  • 探索 Google NotebookLM:AI 驱动的效率提升新利器