/*没有在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;}
}

 int step = 0;

var result = from person in people

             let currentId = step

             select new

             {

                 Id = (step += 2) - 2, // 0, 2, 4...

                 Person = person

             };

不用直接操作id  可以linq给序号  

 

 

linq里面只能OfType<student>() 不能强转

datagrid 返回的 selecteditems 是IList类型的

 

CollectionView 方式

  • 优点:自动处理分页,删除后自动回填
  • 缺点:需要调用 Refresh() 刷新视图

会自动回填

 

linq加反射则不会自动回填



Dictionary<int, string> dict = new Dictionary<int, string>();

dict[1] = "Apple"; // 键 1 不存在,自动添加键值对 {1: "Apple"}

dict[2] = "Banana"; // 键 2 不存在,自动添加键值对 {2: "Banana"}

dict[1] = "Avocado"; // 键 1 已存在,直接覆盖值,变成 {1: "Avocado"}

List<int> keyList = dict.Keys.ToList(); // 转为 List<int>

int[] keyArray = dict.Keys.ToArray(); // 转为 int[]

var longNameStudents = from s in students

                      let nameLength = s.Name.Length // 定义临时变量

                      where nameLength > 5 // 复用计算结果

                      select new { s.Name, nameLength };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914483.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914483.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914483.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何彻底禁用 Chrome 自动更新

如何彻底禁用 Chrome 自动更新 随着谷歌将 Chrome 浏览器版本升级至 138&#xff0c;它即将彻底抛弃对 Manifest V2 扩展的支持。许多用户希望将浏览器版本锁定在 138&#xff0c;以继续使用 uBlock Origin、Tampermonkey 等常用扩展。 本文总结了四种有效方法&#xff0c;帮助…

流批一体的“奥卡姆剃刀”:Apache Cloudberry 增量物化视图应用解析

引言&#xff1a;流批一体&#xff0c;理想与现实的鸿沟 在数据驱动的今天&#xff0c;“实时”二字仿佛拥有魔力&#xff0c;驱使着无数企业投身于流批一体架构的建设浪潮中。我们渴望实时洞察业务变化&#xff0c;实时响应用户需求。以 Apache Flink 为代表的流处理引擎&…

C# 入门教程(三):详解字段、属性、索引器及各类参数与扩展方法

文章目录一、字段、属性、索引器、常量1.字段2.属性2.1 什么是属性2.2 属性的声明2.3 属性与字段的关系3 索引器4. 常量二、传值 输出 引用 数组 具名 可选参数&#xff0c;扩展方法2.1 传值参数2.1.1 值类型 传参2.1.2 引用类型 传参2.2 引用参数2.2.1 引用参数-值类型 传参2.…

《美术教育研究》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a;问&#xff1a;《美术教育研究》是不是核心期刊&#xff1f;答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。问&#xff1a;《美术教育研究》级别&#xff1f;答&#xff1a;省级。主管单位&#xff1a; 安徽出版集团有限责任公司 主办…

每日算法刷题Day47:7.13:leetcode 复习完滑动窗口一章,用时2h30min

思考: 遇到子数组/子字符串可以考虑能不能用滑动窗口&#xff0c; 定长:逆向思维,答案不定 最大长度/最小长度:一般求长度 越长越合法/越短越合法/恰好:一般求数量 主要思考窗口条件成立&#xff0c; 判断条件是符合窗口条件(最小长度/越长越合法还是不符合(最大长度/越短越合法…

电流驱动和电压驱动的区别

理解电流驱动和电压驱动的区别对电路设计至关重要&#xff0c;尤其在高速、高抗噪要求的场景&#xff08;如LVDS&#xff09;。以下是两者的核心对比&#xff1a;一、电压驱动 (Voltage Drive) 核心原理&#xff1a; 驱动器输出一个受控的电压&#xff08;与负载阻抗无关&#…

宿舍电费查询——以ZUA为例

宿舍电费查询——以ZUA为例0. 安装抓包环境手机端桌面端1. 登录1.1 开启抓包后进入缴费页面&#xff1a;1.2 分析请求1.3 编写登录代码2. 获取楼栋及房间ID2.1 获取楼栋ID2.2 编写获取楼栋ID代码2.3 获取房间ID2.4 编写获取房间ID代码3. 获取剩余电费&#xff1a;3.1 选择房间号…

vue中计算属性的介绍

Vue.js 中的计算属性是基于它的响应式系统来实现的&#xff0c;它可以根据 Vue 实例的数据状态来动态计算出新的属性值。在 Vue 组件中&#xff0c;计算属性常用于对数据进行处理和转换&#xff0c;以及动态生成一些需要的数据。一、使用方式1.定义计算属性&#xff1a; 在Vue组…

MFC UI控件CheckBox从专家到小白

文章目录CheckBox勾选框控件控件与变量绑定控件点击消息映射互斥CheckBox勾选框控件 控件与变量绑定 方案一&#xff1a; BOOL m_bEnable1; BOOL m_bEnable2; void A::DoDataExchange(CDataExchange* pDX) {DDX_Check(pDX, IDC_CK_1, m_bEnable1);DDX_Check(pDX, IDC_CK_2, …

阿尔卡特ACT 250 ATP 150 AND ATP 400 分子泵控制器TURBOMOLECULAR PUMP CONTROLLER ALCATEL

阿尔卡特ACT 250 ATP 150 AND ATP 400 分子泵控制器TURBOMOLECULAR PUMP CONTROLLER ALCATEL

python的小学课外综合管理系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具&#xff1a;Navicat/SQLyog等都可以 摘要 随着…

实用技巧 Excel 与 XML互转

一 概述 在android多语言适配中&#xff0c;可能提供的是excel格式的多语言翻译&#xff0c;而且翻译数量非常庞大。那手动一个一个往xml里面添加效率非常低&#xff0c;这时候就需要把excel快速转为android可以直接用的资源文件string.xml二 转换流程2.1 第一步任意文件夹或者…

云原生技术与应用-Containerd容器技术详解

目录 一.Containerd概述 1.什么是containerd 2.Containerd的起源与背景 二.Containerd架构 1.Containerd架构概述 2.核心组件解析 三.安装配置Containerd 1.安装Containerd 2.配置Containerd 四.Containerd基本操作 1.镜像类操作 2.容器类操作 3.任务类操作 4.其他操作 一.…

LINUX714 自动挂载/nfs;物理卷

开机自动挂载 /etc/fstab vim /etc/fstab /dev/sdb2 /u2 ext4 defaults 0 0 mount -a [rootweb ~]# vim /etc/fstab [rootweb ~]# cat /etc/fstab# # /etc/fstab # Created by anaconda on Sat Apr 19 17:11:28 2025 # # Accessible filesystems, by reference, are maintai…

系统性学习C语言-第十六讲-深入理解指针(6)

系统性学习C语言-第十六讲-深入理解指针&#xff08;6&#xff09;1. sizeof 和 strlen 的对比1.1 sizeof 1.2 strlen 1.3 sizeof 和 strlen 的对比2. 数组和指针笔试题解析2.1 一维数组2.2 字符数组2.3 二维数组3. 指针运算笔试题解析3.1 题目1&#xff1a;3.2 题目…

8:从USB摄像头把声音拿出来--ALSA大佬登场!

前言前面的章节我们从认识摄像头开始&#xff0c;逐渐认识的YCbCr&#xff0c;并对其进行了H264的编码以及MP4封装。整个过程中&#xff0c;我们大致使用了V4L2和FFmpeg这两个重量级工具&#xff0c;就像我们前面章节所讲&#xff0c;V4L2只是给图像做服务的&#xff0c;并不参…

Linux 命令:useradd

Linux useradd 命令详细教程 useradd 是 Linux 系统中用于创建新用户账户的基础命令&#xff0c;它通过配置文件&#xff08;如 /etc/passwd、/etc/shadow&#xff09;和默认设置自动完成用户创建流程。本文将详细介绍其用法、参数及相关配置。资料已经分类整理好&#xff1a;h…

Pytest之收集用例规则与运行指定用例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 小伙伴们大家好呀&#xff0c;今天笔者会给大家讲解一下pytest是如何收集我们写好的用例&#xff1f;我们又有哪些方式来运行单个用例或者批量运行用例呢&#xff…

qt 使用memcpy进行内存拷贝时注意的问题

int offset sizeof(st_target_data);// 预先分配足够空间this->featureData.resize(offsetsize);// 再执行拷贝memcpy(this->featureData.data()offset, dataa, size);注意 一定要在mencpy之前 使用resize分配足够的空间&#xff0c;否则在方法退出时候会闪退&#xff…

微调性能赶不上提示工程怎么办?Can Gradient Descent Simulate Prompting?——论文阅读笔记

今天速读一篇文章 Can Gradient Descent Simulate Prompting? 一句话总结 针对【新知识应用的场景里&#xff0c;FT效果往往追不上ICL】这个情况&#xff0c;作者引入MAML的思想↓ 内圈让模型学习新知识形成知识FT模型&#xff1b; 外圈通过最小化ICL和知识FT模型的KL散度&…