如何在文本框中仅显示两位小数,仍然读取5位小数?

时间:2009-04-28 13:08:32

标签: javascript jquery asp.net-ajax

我正在使用一个GridView控件,其TemplateColumn TextBox中有一个ItemTemplate。我将Text的{​​{1}}与数据库中的值绑定。数据库保存这些值有五个小数点,对于接口我只想显示两位小数。

用户可以对此网格进行更改。当我保存时,我希望能够获得未更改的值的所有五位小数。由于它显示为两位小数,我只能在回发时读取两位小数?除了将实际值保存在隐藏变量中之外,还有其他方法吗?

谢谢,

斯里达尔

3 个答案:

答案 0 :(得分:1)

我有一个formatCurrency插件可以帮到你。您要做的是在文本框中显示数据并使用hiddenfield来绑定数据。这样,您不仅可以保留小数位,还可以接受两个以上的小数位作为输入。

以下是一个应该有用的示例。

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js">
</script>
<script type="text/javascript" src="jquery.formatCurrency.js">
</script>
<script type="text/javascript">
    $(document).ready(function() {
        $('.editNumber').formatCurrency();
        $('.editNumber').blur(function(e) {
            var val = $(this).toNumber();
            $(this).next('input:hidden').val(val)
                .end().formatCurrency();

        });
    });
</script>
<asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox runat="server" CssClass="editNumber" ID="EditNumber" Text='<%# Eval("Price") %>' />
                <asp:HiddenField runat="server" ID="HiddenNumber" Value='<%# Bind("Price") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

答案 1 :(得分:0)

在更新之前,您始终可以验证该列中的数据是否确实发生了更改。

您可能会添加某种存储的SQL过程来代替事先进行比较的列名吗?看起来很像。

否则,是的,隐藏的字段带有一些额外的处理来隐藏/修改字段的原始数据似乎是唯一的答案。无论如何你削减它,某些地方会出现一些古怪的逻辑(无论是在数据库中,还是在执行帖子时运行的代码,或者在某些隐藏的字段中)。

答案 2 :(得分:0)

将文本框文本与该Gridrow上该文本框绑定的DataKey的舍入(2位小数)值进行比较。

注意:确保你正确的四舍五入!!!

如果它们相等,则表示用户未更改该值,并按原样保存datakey值。 (即使他改变了价值,但在逻辑上也无关紧要)

如果不是,则表示用户已更改文本框的值,您需要在保存时使用其值。