Как я могу отобразить только два десятичных знака в текстовом поле и все еще прочитать 5 десятичных знаков? - PullRequest
0 голосов
/ 28 апреля 2009

Я использую элемент управления ASP.NET GridView с TemplateColumn, который имеет TextBox в ItemTemplate. Я связываю Text из TextBox со значениями из базы данных. База данных содержит эти значения с пятью десятичными знаками, и для интерфейса я хотел бы отображать только два десятичных знака.

Пользователь может вносить изменения в эту сетку. Когда я сохраняю, я хотел бы иметь возможность получить все пять десятичных знаков для значений, которые не изменились. Так как он отображается как два десятичных знака, я смог прочитать только два десятичных знака при обратной передаче? Есть ли способ обойти это, кроме сохранения фактического значения в скрытой переменной?

Спасибо

Шридхар

Ответы [ 3 ]

1 голос
/ 28 апреля 2009

У меня есть плагин formatCurrency , который может помочь вам здесь. Вам нужно будет отобразить данные в текстовом поле и использовать скрытое поле для привязки данных. Таким образом, вы не только сохраняете десятичные разряды, но и можете принимать более двух десятичных разрядов в качестве входных данных.

Вот пример, который должен работать.

<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>
0 голосов
/ 28 апреля 2009

Сравните текст текстового поля со значением округленного (2 десятичных знака) значения DataKey, связывающего это текстовое поле с этой решеткой.

Примечание: убедитесь, что вы правильно округлили !!!

Если они равны, это означает, что пользователь не изменил значение, и вы сохраните значение datakey как есть. (Даже если он изменил значение, это не имеет значения в логических терминах)

Если это не так, это означает, что пользователь изменил значение текстового поля, и вам необходимо использовать его значение при сохранении.

0 голосов
/ 28 апреля 2009

Вы всегда можете проверить, что данные действительно изменились в этом столбце, прежде чем обновлять их.

Вы могли бы потенциально добавить какую-то хранимую процедуру SQL, которая заняла бы место в имени столбца, которое выполняло бы сравнение заранее? Похоже на натяжение.

В противном случае, да, скрытое поле с некоторой дополнительной обработкой, выполняемой для сокрытия / изменения исходных данных поля, кажется единственным ответом. В любом случае, если вы обрежете его, где-то будет какая-то изворотливая логика (будь то в базе данных или в коде, который запускается при выполнении публикации или в каком-то скрытом поле).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...