我正在使用一个GridView
控件,其TemplateColumn
TextBox
中有一个ItemTemplate
。我将Text
的{{1}}与数据库中的值绑定。数据库保存这些值有五个小数点,对于接口我只想显示两位小数。
用户可以对此网格进行更改。当我保存时,我希望能够获得未更改的值的所有五位小数。由于它显示为两位小数,我只能在回发时读取两位小数?除了将实际值保存在隐藏变量中之外,还有其他方法吗?
谢谢,
斯里达尔
答案 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值。 (即使他改变了价值,但在逻辑上也无关紧要)
如果不是,则表示用户已更改文本框的值,您需要在保存时使用其值。