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

DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(五)

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。

本文将为大家一步一步演示如何在一个MVVM应用程序中使用虚拟源。

DevExpress WPF中文教程图集

注意:本教程使用Issues Service作为示例数据源,使用InfiniteAsyncSource作为虚拟数据源。

获取DevExpress WPF v25.1正式版下载

Step 5:启用数据编辑操作

您可以允许用户在GridControl中编辑数据。

DevExpress WPF中文教程图集

实现细节

1. 为用户可以编辑的列启用ColumnBaseAllowEditing属性。

2. 设置TableView.ShowUpdateRowButtons属性为OnCellEditorOpen / OnCellValueChange来启用编辑整行模式。

3. 创建一个Issues Service的UpdateRowAsync方法将更改保存到数据源的任务。

4. 在ViewModel中创建UpdateIssue命令,要异步保存更改,请将任务分配给RowValidationArgsResultAsync属性。

5. 将命令绑定到GridViewBase.ValidateRowCommand。

xml

<dxg:GridControl>
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Subject" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="User" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Created" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Votes" IsSmart="True" AllowEditing="True"/>
<dxg:GridColumn FieldName="Priority" IsSmart="True" AllowEditing="True"/>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView ShowUpdateRowButtons="OnCellEditorOpen"
ValidateRowCommand="{Binding UpdateIssueCommand}"/>
</dxg:GridControl.View>
</dxg:GridControl>

C#

[Command]
public void UpdateIssue(RowValidationArgs args) {
args.ResultAsync = UpdateIssueAsync((IssueData)args.Item);
}static async Task<ValidationErrorInfo> UpdateIssueAsync(IssueData issue) {
await IssuesService.UpdateRowAsync(issue);
return null;
}
教程示例服务

本节主要介绍Issues Service,本教程将此服务用作示例数据源,它的API类似于StackExchange Questions API。

概述

Issues Service是一个静态类:

C#

public static class IssuesService {
public async static Task<IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter);
public async static Task<UserData[]> GetUsersAsync();
public async static Task<IssuesSummaries> GetSummariesAsync(IssueFilter filter);
public async static Task UpdateRowAsync(IssueData row);
}
GetIssuesAsync方法

GetIssuesAsync方法返回一个任务,允许您获取一个包含以下数据的页面:

C#

public class IssueData {
public int Id { get; private set; }
public string Subject { get; set; }
public int UserId { get; set; }
public DateTime Created { get; set; }
public int Votes { get; set; }
public Priority Priority { get; set; }
}

Issues Service允许您应用以下排序顺序:

C#

public enum IssueSortOrder {
Default,
CreatedDescending,
VotesAscending,
VotesDescending,
}

Issues Service允许您应用以下过滤器:

C#

public class IssueFilter {
public Priority? Priority { get; private set; }
public DateTime? CreatedFrom { get; private set; }
public DateTime? CreatedTo { get; private set; }
public int? MinVotes { get; private set; }
}
GetUsersAsync方法

GetUsersAsync方法返回一个任务,允许您获取一个用户集合:

C#

public class UserData {
public int Id { get; }
public string FirstName { get; }
public string LastName { get; }
public string FullName => FirstName + " " + LastName;
}
GetSummariesAsync方法

GetSummariesAsync方法返回一个任务,允许您获得行的总数和最后创建对象的日期时间:

C#

public class IssuesSummaries {
public int Count { get; private set; }
public DateTime? LastCreated { get; private set; }
}
UpdateRowAsync方法

UpdateRowAsync方法返回一个任务,该任务允许您向数据源提交更改。

其他

GridControl在读取操作期间显示一个加载指示器,因为Issues Service以短时间延迟返回数据:

C#

public async static Task<IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter) {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task<UserData[]> GetUsersAsync() {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task<IssuesSummaries> GetSummariesAsync(IssueFilter filter) {
await Task.Delay(300).ConfigureAwait(false);
// ...
}
public async static Task UpdateRowAsync(IssueData row) {
// ...
await Task.Delay(500).ConfigureAwait(false);
}

http://www.dtcms.com/a/576828.html

相关文章:

  • AI SQL助手本地搭建(附源码)
  • Zabbix企业级分布式监控系统(下)
  • 『Linux升级路』解析环境变量
  • 浏览器能正常访问URL获取JSON,但是pycharm里调不通
  • AI代码开发宝库系列:PDF文档解析MinerU
  • 校园招聘seo行业网
  • 开发网站的技术路线博达高校网站群建设教程
  • 物联网运维中基于联邦学习的跨设备隐私保护与协同优化技术
  • 物联网AI模组:连接与智能的融合
  • 【底层机制】ART虚拟机深度解析:Android运行时的架构革命
  • 嵌入式硬件:如何理解高频电子线路,从入门开始
  • 物联网赋能校园共享站:打造24小时一站式服务新体验!
  • 萤石开放平台申请物联网卡指南
  • 矩阵在密码学的应用——希尔密码详解
  • 20251106给荣品RD-RK3588-MID开发板跑Rockchip的原厂Android13系统时适配AP6275P模块的WIFI【使用荣品的DTS】
  • 学校网站代码模板成都的网站建设开发公司哪家好
  • 怎么制作自己的小网站低代码前端开发平台
  • Elastic Stack 或 ELK —— 日志管理与数据分析方案
  • 手机、平板、电脑如何投屏画面到电视?ToDesk远程控制TV版教程分享
  • UEC++UNiagaraFunctionLibrary源代码
  • 小杰-大模型(twelve)——大模型部署与应用——gradipo-实现UI界面
  • Python基础入门
  • 【React Native】粘性布局StickyScrollView
  • 无人机RTMP推流平台EasyDSS:构建新一代智能交通视频监控系统
  • 从大数据角度看时序数据库选型:Apache IoTDB的实战经验分享
  • Apache Drill 连接 MySQL 或 PostgreSQL 数据库
  • React Native App 图表绘制完整实现指南
  • 做招商加盟网站怎么样济南网站优化的周期
  • 怡梦姗网站做么动漫与游戏制作专业就业方向
  • js原生、vue导出、react导出、axios ( post请求方式)跨平台导出下载四种方式的demo