本帖最后由 Simon.hu 于 2020-11-5 18:36 编辑
最近听到了很多的表格内公式互算的问题,今天咱以一个小例子,让大家了解一下怎么玩
先看一下问题描述哈
页面上有一个表,表格中有3列,分别是【单价】,【数量】,【总价】;我们希望用户任意输入2个值就能自动把第三个值计算出来
这样描述言简意赅,但是细细品味以后,我们需要将这个问题分解,在一点一点考虑,其实问题分解完了以后就是这样的
新增时:
修改时:
- 修改单价,总价变
- 修改总价,单价变
- 修改数量,没效果(这个我专门和几个大佬确定过,确实是这个需求,因为一般数量很少修改,大部分为单价和总价的修改)
清楚了问题以后,我想先给大家看一下期望效果
如下图所示
那么如何来解决问题呢?
活字格自带的功能确实没有,不过这个需要我们的代码来做了,能写代码基本等于万能
废话不多说了,先来一个代码吓吓人
- // JavaScript source code
- Forguncy.Page.ready(function () {
- var priceColIndex = 1;
- var countColIndex = 2;
- var totalColIndex = 3;
- var isSettingValue = false;
- var listview = Forguncy.Page.getListView("表格1");
- var updateCount = function (row) {
- var total = listview.getValue(row, totalColIndex);
- if (total == null) {
- return false
- }
- var price = listview.getValue(row, priceColIndex);
- if (price == null) {
- return false
- }
- var count = total / price;
- isSettingValue = true;
- listview.setValue(row, countColIndex, count);
- isSettingValue = false;
- return true;
- }
- var updatePrice = function (row) {
- var total = listview.getValue(row, totalColIndex);
- if (total == null) {
- return false
- }
- var count = listview.getValue(row, countColIndex);
- if (count == null) {
- return false
- }
- var price = total / count;
- isSettingValue = true;
- listview.setValue(row, priceColIndex, price);
- isSettingValue = false;
- return true;
- }
- var updateTotal = function (row) {
- var price = listview.getValue(row, priceColIndex);
- if (price == null) {
- return false
- }
- var count = listview.getValue(row, countColIndex);
- if (count == null) {
- return false
- }
- var total = price * count;
- isSettingValue = true;
- listview.setValue(row, totalColIndex, total);
- isSettingValue = false;
- return true;
- }
- listview.bind(Forguncy.ListViewEvents.ValueChanged, function (arg1, arg2) {
- if (isSettingValue) {
- return;
- }
- var row = arg2.CellRanges[0].Row;
- var col = arg2.CellRanges[0].Column;
- if (row >= 0 && col >= 0) {
- if (col === priceColIndex) {
- if (!updateTotal(row)) {
- updateCount(row);
- }
- }
- else if (col === countColIndex) {
- if (!updateTotal(row)) {
- updatePrice(row);
- }
- }
- else if (col === totalColIndex) {
- if (!updatePrice(row)) {
- updateCount(row);
- }
- }
- }
- });
- });
复制代码
把这个代码搞到页面的这个位置,就行了
这里是我的工程文件,你可以拿去玩玩
Document.fgcc
(55.06 KB, 下载次数: 295)
|