Avatar billede torotune Nybegynder
11. maj 2006 - 14:54 Der er 16 kommentarer og
1 løsning

Update valuta med komma i database

Hej,

Jeg har et lile komma-problem her, når jeg prøver at update valuta. Jeg har et detailsview med:

<asp:TemplateField HeaderText="Pris">
<EditItemTemplate>
  <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind  ("Pris") %>'></asp:TextBox>
</EditItemTemplate>

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Pris", "{0:C}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

Min kollonne i min db er af typen "valuta".


- Når det bliver vist, viser den eks. Kr. 100,00

- I editmode viser den 100

- Hvis jeg ændrer det i editmode til 100,00 updateres der uden fejl.

- Hvis jeg ændrer det i editmode til 100,50 updateres der til
10050,00 !

Min UpdateParameter hedder:

<asp:Parameter Name="PrisForm3" Type="Decimal" />

Nogen der ved hvordan det kan blive formateret ved update, så det rigtige bliver sat ind?

Mvh.
Avatar billede torotune Nybegynder
11. maj 2006 - 14:56 #1
Sorry, UpdateParameter bare

<asp:Parameter Name="Pris" Type="Decimal" />
Avatar billede snepnet Nybegynder
11. maj 2006 - 17:14 #2
Du må nok angive specifieren på både label og tekstboks:
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind  ("Pris", "{0:C}") %>'></asp:TextBox>
Og så skal du nok også sikre dig at du arbejder i den rigtige culture - du kan sætte det i dit page directive (og i web.config, eller programmatisk).
Culture="da-DK" UICulture="da-DK"
Mvh
Avatar billede torotune Nybegynder
11. maj 2006 - 17:37 #3
Hejsa,

Jeg har prøvet at angive det for tekstboksen også, her indeholder den så i editmode:

Kr. 100,50

Hvis man bare updater uden at ændre kommer der en "Input string was not in a correct format."

Hvis man fjerner "Kr." bliver det sat ind, men igen som
10050,00 kr.

Culture står rigtig nok i web.config som default.
Avatar billede snepnet Nybegynder
12. maj 2006 - 13:04 #4
Prøv med den her:

<asp:TemplateField>
    <ItemTemplate>
        <asp:Label ID="lblMoney" runat="server" Text='<%# Bind("Pris", "{0:C}") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="txtMoney" runat="server" Text='<%# Bind("Pris") %>'></asp:TextBox>
    </EditItemTemplate>
</asp:TemplateField>

Så slipper du i hvert fald for den med at den ikke er i rigtigt format.

Hvad den anden fejl angår.... Hvad databinder du imod?

Mvh
Avatar billede torotune Nybegynder
12. maj 2006 - 13:40 #5
Jep, nu skriver den et beløb uden "kr." i EditMode.
Jeg forstår ikke helt, altså jeg skriver til en tabel i en
Access-db som har kollonnen "Pris" som er af datatypen "valuta".

Den sætter det rigtigt ind hvis der bare står nuller efter kommaet, men hvis det er positive tal så flytter den bare kommaet helt hen igen og skriver ,00 efter tallet.
Avatar billede snepnet Nybegynder
12. maj 2006 - 14:02 #6
Så du bruger en accessdatasource eller?
Mvh
Avatar billede torotune Nybegynder
12. maj 2006 - 15:29 #7
Nej jeg bruger SqlDataSource:

UpdateCommand="UPDATE [Tabel] SET [Pris] = ? WHERE [ID] = ?">

<asp:Parameter Name="Pris" Type="Decimal" />
<asp:Parameter Name="ID" Type="Int32" />
Avatar billede snepnet Nybegynder
13. maj 2006 - 09:24 #8
Hvad sker der hvis du bruger en AccessDataSource (om ikke andet, så for testens skyld).
Mvh
Avatar billede torotune Nybegynder
15. maj 2006 - 16:59 #9
Hmm.. nej det er det samme hvis jeg bruger AccessDataSource. Det hjælper heller ikke at gå ind i databasen og definere hvor mange decimaler der må være efter kommaet..
Er der ikke en måde at formatere beløbet på, eller problemet ligger måske i og med selve databasen?
Avatar billede snepnet Nybegynder
19. maj 2006 - 00:41 #10
Hej - og undskyld ventetiden... Jeg har været indisponibel.
Har du stadig ballade?
Mvh
Avatar billede torotune Nybegynder
19. maj 2006 - 09:48 #11
Hej - helt ok!

Ja, det vil stadig ikke fungere, men jeg faldt over en der har samme problem her
  http://www.eksperten.dk/spm/710153
Han bruger en tableAdapter med et DataSet, hvor han så fik det til at virke. Det kan være jeg skal prøve det, og at det er SqlDataSource der laver vrøvl. Jeg har vel også bedre muligheder for at formatere tallene her via Get og Set når det bindes igennem en klasse?
Avatar billede snepnet Nybegynder
19. maj 2006 - 18:41 #12
Mmm... Det skulle jo gerne kunne lade sig gøre uden de store fiksfakserier... Du er velkommen til at sende mig dit projekt - så kigger jeg lige på det.
(hvis du lægger din emailadresse herude, skal jeg nok skrive tilbage).
Mvh
Avatar billede torotune Nybegynder
21. maj 2006 - 10:31 #13
Det må du meget gerne, hvis du har tid til det :-)

Du kan skrive til torotune@hotmail.com så skal jeg lige sende dig et eksempel på at det ikke vil samarbejde.
Avatar billede torotune Nybegynder
10. juni 2006 - 00:10 #14
Hej snepnet! Jeg tror jeg laver eksemplet om og ser om det virker med ObjectDataSource og MySQL i stedet. Så vender jeg tilbage hvis det giver samme problem der..

Men læg et svar indtil videre :-)
Avatar billede snepnet Nybegynder
10. juni 2006 - 12:15 #15
Hej igen :o)

Hmm... jeg forstår ikke helt.... Jeg synes jeg havde skrevet noget tilbage til dig her efter jeg fik dit projekt... Nå men:
Der er samme opførsel her, som den du beskriver - men prøv med sådan noget som dette:

I Access:
Sæt kolonnetypen til
Number
Og yderligere:
Field Size : Double
Decimal Places : 2

Og prøv derefter en helt standard model:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
    <asp:GridView ID="GridView1"
        runat="server"
        AutoGenerateColumns="False"
        DataKeyNames="Id"
        DataSourceID="AccessDataSource1"
        EmptyDataText="There are no data records to display.">
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
            <asp:BoundField DataField="Vare" HeaderText="Vare" SortExpression="Vare" />
            <asp:BoundField DataField="Pris" HeaderText="Pris" SortExpression="Pris" />
        </Columns>
    </asp:GridView>
    <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="App_Data\db.mdb"
        DeleteCommand="DELETE FROM `VareTabel` WHERE `Id` = ?" InsertCommand="INSERT INTO `VareTabel` (`Id`, `Vare`, `Pris`) VALUES (?, ?, ?)"
        SelectCommand="SELECT `Id`, `Vare`, `Pris` FROM `VareTabel`" UpdateCommand="UPDATE `VareTabel` SET `Vare` = ?, `Pris` = ? WHERE `Id` = ?">
        <InsertParameters>
            <asp:Parameter Name="Id" Type="Int32" />
            <asp:Parameter Name="Vare" Type="String" />
            <asp:Parameter Name="Pris" Type="Double" />
        </InsertParameters>
        <DeleteParameters>
            <asp:Parameter Name="Id" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="Vare" Type="String" />
            <asp:Parameter Name="Pris" Type="Double" />
            <asp:Parameter Name="Id" Type="Int32" />
        </UpdateParameters>
    </asp:AccessDataSource>
</form>
</body>
</html>

Desuden bør du læse denne her:
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.boundfield.dataformatstring.aspx

Den er ganske væsentlig.

Mvh
Avatar billede torotune Nybegynder
11. juni 2006 - 11:58 #16
Hej igen!

Ja, så er den der jo :-) Jeg prøvede først med din model som virkede perfekt, og lagde mærke til at du havde sat insert- og updateparametrenes typer til Type="double". Hvis jeg gør det i min model - og også ændrer databasekollonens datatype efter dine anvisninger virker det også med SqlDatasource og med gridview'ets kollonne formateret med <%# Bind("Pris", "{0:C}") %> Men det virker også hvis jeg bare har databasens kollonne sat som "valuta".

Men vil du anbefale din metode med double og 2 decimaler frem for valuta/currency som datatyper i kollonner for databaser generelt og så formatere outputtet med "{0:C}"?
Avatar billede snepnet Nybegynder
11. juni 2006 - 12:27 #17
Plejer egentlig ikke selv at benytte valuta/currency på databasen... Så det må vel egentlig være et ja :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester