JimBrown08322
04-12-2007, 10:12 AM
Using VWD2005 and Asp.net 2.0
I have a GridView that contains a currency column. I set the DataFormatString property to {0:c}. I also set HtmlEncode = False (saw somewhere to do that so it actually formats).
It correctly displays the value in $0.00 format. Edit/Update seem to be OK, but when I Delete it fails with
"Input string was not in a correct format".
I'm thinking that the $ is getting saved in the Original_<column> parameter and causes a parsing error during the CompareAllValues.
What is the trick here?
JimBrown08322
04-13-2007, 08:13 AM
PS: here is code for a page that shows the problem. Its been suggested elsewhere to remove all but the primary key from the delete WHERE, but that would break the concurrency checks.
<%@ 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">
<div>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="RecID" DataSourceID="SqlDataSource1">
<Columns>
<asp:CommandField ButtonType="Button" ShowDeleteButton="True" ShowEditButton="True"
ShowSelectButton="True" />
<asp:BoundField DataField="RecID" HeaderText="RecID" InsertVisible="False" ReadOnly="True"
SortExpression="RecID" />
<asp:BoundField DataField="dataString" HeaderText="dataString" SortExpression="dataString" />
<asp:BoundField ApplyFormatInEditMode="True" DataField="dataDate" DataFormatString="{0:d}"
HeaderText="dataDate" HtmlEncode="False" SortExpression="dataDate" />
<asp:BoundField DataField="dataInt" HeaderText="dataInt" SortExpression="dataInt" />
<asp:BoundField DataField="dataCurrency" DataFormatString="{0:c}" HeaderText="dataCurrency"
HtmlEncode="False" SortExpression="dataCurrency" />
<asp:BoundField DataField="dataFloat" HeaderText="dataFloat" SortExpression="dataFloat" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:AspNetTestsConnectionString %>"
DeleteCommand="DELETE FROM [TestTable1] WHERE [RecID] = @original_RecID AND [dataString] = @original_dataString AND [dataDate] = @original_dataDate AND [dataInt] = @original_dataInt AND [dataCurrency] = @original_dataCurrency AND [dataFloat] = @original_dataFloat"
InsertCommand="INSERT INTO [TestTable1] ([dataString], [dataDate], [dataInt], [dataCurrency], [dataFloat]) VALUES (@dataString, @dataDate, @dataInt, @dataCurrency, @dataFloat)"
OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT * FROM [TestTable1]"
UpdateCommand="UPDATE [TestTable1] SET [dataString] = @dataString, [dataDate] = @dataDate, [dataInt] = @dataInt, [dataCurrency] = @dataCurrency, [dataFloat] = @dataFloat WHERE [RecID] = @original_RecID AND [dataString] = @original_dataString AND [dataDate] = @original_dataDate AND [dataInt] = @original_dataInt AND [dataCurrency] = @original_dataCurrency AND [dataFloat] = @original_dataFloat">
<DeleteParameters>
<asp:Parameter Name="original_RecID" Type="Int32" />
<asp:Parameter Name="original_dataString" Type="String" />
<asp:Parameter Name="original_dataDate" Type="DateTime" />
<asp:Parameter Name="original_dataInt" Type="Int32" />
<asp:Parameter Name="original_dataCurrency" Type="Decimal" />
<asp:Parameter Name="original_dataFloat" Type="Double" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="dataString" Type="String" />
<asp:Parameter Name="dataDate" Type="DateTime" />
<asp:Parameter Name="dataInt" Type="Int32" />
<asp:Parameter Name="dataCurrency" Type="Decimal" />
<asp:Parameter Name="dataFloat" Type="Double" />
<asp:Parameter Name="original_RecID" Type="Int32" />
<asp:Parameter Name="original_dataString" Type="String" />
<asp:Parameter Name="original_dataDate" Type="DateTime" />
<asp:Parameter Name="original_dataInt" Type="Int32" />
<asp:Parameter Name="original_dataCurrency" Type="Decimal" />
<asp:Parameter Name="original_dataFloat" Type="Double" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="dataString" Type="String" />
<asp:Parameter Name="dataDate" Type="DateTime" />
<asp:Parameter Name="dataInt" Type="Int32" />
<asp:Parameter Name="dataCurrency" Type="Decimal" />
<asp:Parameter Name="dataFloat" Type="Double" />
</InsertParameters>
</asp:SqlDataSource>
</div>
</form>
</body>
</html>