cxGrid自动保存当前单元格输入的数据

news2024/12/26 11:07:20

遇到的问题,利用cxGrid做数据录入界面,当用户在一个单元格中录入数据,没有回车,然后直接点工具条上的保存按钮,执行数据提交,结果当前输入的内容丢掉了,又回到输入前的值。

在群中求助,得到好多朋友的支持,这里先感谢了,最终明白大家的说法,并成功解决掉了这个问题。

在这种情况下,与cxGrid的实现机制有关系,也就是说,点击工具条上的按钮,没有发生焦点变换,这时候cxGrid认为自己的用户没有输入完成,继续等用户输入。

理解了这种情况,有一种解决方法,就是在点保存按钮时,强制调用Self.SetFocus,这里Self指Form;另外一种解决方法,就是调用cxGrid提供方法,强制提交数据。

看下面的代码,按大家的提法,有很多写法:

procedure Tsys_AddressBTDoc.UpdateData(aTableView: TcxGridDBTableView);
var
  AValue:Variant;
begin
  if aTableView.DataController.IsEditing then
  begin
    //这是一种方法
    //AValue:=TcxCustomTextEdit(aTableView.DataController.Controller.EditingController.Edit).Text;
    //aTableView.dataController.DataSet.Edit;
    //aTableView.dataController.DataSet.FieldByName('fname').AsString:=AValue;
    //aTableView.dataController.DataSet.Post;

    //这是一种方法
    //aTableView.Controller.EditingController.HideEdit(True);

    //这是一种方法
    //aTableView.Controller.EditingController.Edit.PostEditValue;

    //这是一种方法
    //aTableView.dataController.DataSet.Post;

    //这是一种方法
    aTableView.dataController.UpdateData;
  end;
end;

参数是cxGrid的一个视图。如下图,指ShiTableView。

当点击保存按钮,执行这个方法,强制cxGrid提交数据。

UpdateData(ShiTableView);

写出这样的结果,看似简单,我确用了好几个小时,因为产生一种现象,就是用户第一次输入,执行上面的动作,数据得不到保存,第二次及以后则正常。最后查明,原来我的ShiTableView还使用了事件:ShiTableViewFocusedRecordChanged

在这个事件上,我做了调入其他cxGrid需要的数据,正是这个事件造成第一次执行错误。用代码在执行UpdateData前去掉这个事件,执行后再恢复事件。最终的代码变成这样:

procedure Tsys_AddressBTDoc.actSaveExecute(Sender: TObject);
begin

  DisableFocusedRecordChanged;
  try
     //Self.SetFocus;//这是一种强制保存当前cxGrid输入的内容的方法
     UpdateData(ShiTableView); //这是一种强制保存当前cxGrid输入的内容的方法
     Save;
  finally
     EnableFocusedRecordChanged;
  end;

end;

最终,还有一点要说明,SetFocus与UpdateData的区别:

如果用SetFocus,会使cxGrid没有了焦点,用户要继续操作cxGrid,就需要mouse点击一下,让cxGrid重新得到焦点,对于连续输入来说,不方便。而UpdateData方法,要写更多的代码,使得代码偶合增加,有利有憋,自己把握了!我最后用的UpdateData方法。

这是最后完成的界面:

再一次感谢群友们的指导与帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

axios实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台

文章目录 📋前言🎯demo 介绍🎯后端与接口的调试🧩关于运行后端项目🧩关于接口的调试 🎯功能分析🧩数据的展示与分页功能🧩添加功能🧩编辑功能🧩删除功能 &…

大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(一)

文章目录 写在前面整体效果开发所需环境开发工具需要具备的知识Node安装更改npm包安装的目录设置npm镜像vscode安装创建vue项目代码编写项目先体验注意写在前面 stable-diffusion-webui(以下简称sd)项目通过FastAPI对外提供了一系列的api用于开发者二次开发或者集成到自己的…

真正理解微软Windows程序运行机制——窗口机制(第三部分)

我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解。其实这没什么,我在学生时代也被这个问题困绕过。…

帆软报表二次开发 树组件节点上添加自己的按钮

我这里的需求是在树组件的子节点上加一个复制按钮。 先看效果 这是一颗多选树,用的是bi.tree_value_chooser_pane 这个组件,这个组件默认支持多选,它默认的效果为: 这个组件没有提供机制来自定义节点的渲染。 通过查找源码发现这个组件内部构建树是通过BI.$.fn.zTree来构…

C语言进阶---数据的存储

1、整形存储和大小端 本章重点: 1、数据类型详细介绍 2、整型在内存中的存储:原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 1.1、数据类型介绍 char 1byte //字符数据类型 short 2byte //…

【MyBatis】3、一文介绍如何用 MyBatis 进行多表级联查询

目录 一、设置新插入记录的主键&#xff08;id&#xff09;到参数对象中二、PageHelper 分页插件三、多表关系四、一对一五、一对多六、多对多 一、设置新插入记录的主键&#xff08;id&#xff09;到参数对象中 <insert id"insert01" parameterType"Studen…

【二叉树---堆】

二叉树---堆 一、树的概念及结构1. 树的概念2.树的相关概念3.树的表示 二、二叉树1.二叉树的概念2.特殊的二叉树3.二叉树的性质 三、堆1.堆的概念及结构2.堆的实现&#xff08;1&#xff09;函数的声明&#xff08;2&#xff09;函数的实现&#xff08;3&#xff09;测试堆的基…

chatgpt赋能python:Python多次运行的优势及方法

Python多次运行的优势及方法 随着Python在计算机领域的广泛应用&#xff0c;越来越多的企业和个人开始使用Python进行编程。在Python编程中&#xff0c;多次运行同一份代码不仅是常见的需求&#xff0c;而且有着众多的优势。 Python多次运行的优势 调试 在编程过程中&#…

chatgpt赋能python:Python安装EGG——一个简单的指南

Python安装EGG——一个简单的指南 如果你使用Python有一段时间了&#xff0c;你可能会遇到需要安装扩展包&#xff08;Package&#xff09;的情况。在Python中&#xff0c;这些扩展包的文件格式通常是.egg&#xff08;Easy Installable GZip&#xff09;。在本文中&#xff0c…

chatgpt赋能python:Python如何安装CSV模块

Python如何安装CSV模块 CSV是一种广泛使用的文件格式&#xff0c;用于存储表格数据。Python已经内置了CSV模块&#xff0c;可以轻松地读取和写入CSV文件。在这篇文章中&#xff0c;我们将关注如何安装CSV模块并开始与CSV文件进行交互。 什么是CSV&#xff1f; CSV是Comma Se…

chatgpt赋能python:如何安装pyecharts

如何安装pyecharts Pyecharts是一个基于echarts的数据可视化工具&#xff0c;它是Python语言的一个库&#xff0c;可以通过Python编程语言进行数据可视化&#xff0c;并且能通过交互式的方式展示出来。 在本文中&#xff0c;我们将介绍如何安装pyecharts&#xff0c;如果您是…

chatgpt赋能python:Python宏定义:编写高效、灵活和可维护的代码

Python宏定义&#xff1a;编写高效、灵活和可维护的代码 Python是一种非常流行的编程语言&#xff0c;它的简洁性、易读性以及灵活性使得它成为了众多开发者的首选。Python是一个强大的语言&#xff0c;它可以大大提高您的编程效率。Python的宏定义是一种非常有用的技巧&#…

【VB6|第18期】基于libxl导出Excel之导出失败的解决方案

日期&#xff1a;2023年6月12日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

康耐视Visionpro-插入脚本的标准流程 _ 简单方式

机器视觉海康Visionmaster-字符缺失缺陷检测 支持脚本添加的工具如下&#xff1a;添加的脚本只针对当前工具容器有效 Step - 1 &#xff1a; 制作ToolBlock&#xff0c;添加输入/输出等 Step - 2 &#xff1a; 新建Script Step - 3 &#xff1a; 检查界面终端 Step - 4 &am…

【黑马程序员 C++教程从0到1入门编程】【笔记4-2】C++核心编程(类和对象——运算符重载)(左操作数、右操作数)(仿函数)

文章目录 4 类和对象&#xff08;类属性【成员属性】&#xff0c;类函数【成员函数】&#xff09;4.5 运算符重载&#xff08;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型&#xff09;4.5.0.1 可重载运算符和不可重载运算符4.5.0…

案例:创建一个学生管理系统(PXSCJ1)的数据库(SQL)

1、新建数据库&#xff1a;PXSCJ1 --创建数据库CREATE DATABASE PXSCJ1 --创建并确认属性&#xff1a;XSB、KCB、CJB&#xff08;以下代码用于2、3、4、5题&#xff09; use PXSCJ1 create table XSB (学号 char(6) primary key check(学号 like [0][8][1][12][0-9][0-9])…

SM3_Robotics,轴组函数调用

1轴组状态&#xff1a; AXIS_GROUP_REF_SM3 (FB) 2使能&#xff1a; MC_GroupEnable &#xff08;使能&#xff09; 默认在&#xff1a; MC_GroupDisable &#xff08;轴组关闭&#xff09;位置 1&#xff1a;用 MC_GroupEnable &#xff08;使能&#xff09;进入 Gro…

chatgpt赋能python:Python怎么定义主函数:完整指南

Python怎么定义主函数&#xff1a;完整指南 Python是当今最流行的编程语言之一&#xff0c;因为它提供了简单易学、高效率、高度可读性和可维护性的代码编写方式。在Python中定义主函数是一个重要的编程技能&#xff0c;使您能够将Python程序变成可执行的Python应用程序。在本…

chatgpt赋能python:Python多次输入——如何自动化处理数据输入

Python多次输入——如何自动化处理数据输入 作为一名有10年Python编程经验的工程师&#xff0c;我曾遇到过很多需要重复输入数据的情况。这不仅浪费时间&#xff0c;而且容易出错&#xff0c;影响我们的工作效率和准确性。作为程序员&#xff0c;我们需要借助Python的自动化技…