Lightswitch HTML - 根据表格中的字段更改货币

时间:2016-05-12 09:53:48

标签: visual-studio-lightswitch lightswitch-2013

我有以下情况:

我有一个名为OrderLines的表,其中包含

等信息
  • 部分名称
  • 清单价格
  • 货币

现在从这些信息中,我希望能够将表格视图中的文本更改为类似于货币。目前默认情况下,我可以确定1种货币,我将其称为GBP,因此当Lightswitch看到货币值时,它会加上GBP。

我希望能够改变这个!!

在“编辑PostRender代码”块中,是否可以使用contentItem.dataBind函数根据与该特定项目关联的货币字段来更改此项?

谢谢你的任何帮助,希望这是可能的..(这些应该是美元,基于与表格中此行关联的货币文件)

enter image description here

如上所示,OrderlIne表位于“订单”屏幕的表格视图中 enter image description here

使用的代码:

myapp.ViewProjectOrder.ListPrice_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            if (contentItem.screen.OrderLines.Currency == "GBP") {
                $(element).text("£ " + value);
            }
            else if (contentItem.screen.OrderLines.Currency == "CAD") {
                $(element).text("$ " + value);
            }
        }
    });
};

Lightswitch当前将ListPrice视为小数,就像我将其设置为Currency一样,它总是显示我设置的货币前缀,这就是为什么上面的表中有英镑符号,我已经将此更改为十进制以查看它这没有运气: enter image description here

如果我进入代码,它不会使用代码找到货币的值:

enter image description here

2 个答案:

答案 0 :(得分:2)

我设置了一个类似的例子,并为ListPrice使用了一个double,并为该货币使用了一个字符串。我相信这比使用内置的Money类型更安全。

以下代码适用于“查看”屏幕,可以稍微调整以在“浏览”屏幕上工作。绑定到ListPrice值的值,并设置相应的货币符号。一般来说,我建议使用更通用的功能返回货币的ISO代码的符号。您也可能希望在货币更改时设置类似的绑定。

myapp.ViewProjectOrder.ListPrice_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            if ( contentItem.screen.ProjectOrder.Currency == "GBP" ) {
                $(element).text("£ " + value);
            }
        }
    });
};

假设一个可以包含多个OrderLine的Project项目更复杂的情况,要在查看Project的OrderLines集合时显示订单行详细信息,您需要更改集合的postRender代码&# 39; s行模板。以下代码应为您提供格式化值的起点:

myapp.ViewProject.rows_postRender = function (element, contentItem) {
    contentItem.dataBind("value", function (value) {
        if (value) {
            var tags = element.children;
            var searchText = contentItem.value.ListPrice;

            for (var i = 0; i < tags.length; i++) {
                if (tags[i].textContent == searchText) {

                    if (contentItem.value.Currency == "GBP") {
                        tags[i].textContent = "£ " + tags[i].textContent;
                    }
                    else if (contentItem.value.Currency == "USD") {
                        tags[i].textContent = "$ " + tags[i].textContent;
                    }
                    break;
                }
            }
        }
    });
};

答案 1 :(得分:1)

由于内置了globalize.js,因此您可以使用以下方式呈现任何货币:

Globalize.format(Globalize.parseInt(value), 'c0', 'en-gb');

c0代表具有0个十进制数字的货币。可以从数据库/其他字段获取En-gb-抱歉,GBP无法正常工作。

是的,无论您如何存储金额,似乎都需要parseInt / ParseFloat。

LightSwitch万岁!