ASP.NET GridView Удаление "Входная строка была в неправильном формате"
У меня есть ASP.NET GridView, который отображает продукты одежды из моей базы данных. Поле в моей базе данных - это Price, и для отображения этого значения в £xxx.xx я установил Price DataFormatString равным {0:C}.
GridView также имеет кнопку удаления, которую я преобразовал в шаблон и добавил
OnClientClick="return confirm('Are you sure you want to delete this product?');"
добавить подтверждающее сообщение после нажатия кнопки. Однако, когда я нажимаю OK, чтобы подтвердить удаление продукта, я получаю это сообщение об ошибке:
Входная строка была не в правильном формате.
Когда я извлекаю DataFormatString из GridView, чтобы цены отображались как xxx.xxxx по умолчанию, функция удаления работает нормально. Только когда DataFormatString присутствует, я получаю эту ошибку. Как мне обойти это? Помощь приветствуется.
HTML
<div id="GridView">
<asp:GridView ID="ProductsGridView" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellSpacing="-1" DataKeyNames="Id" DataSourceID="ProductsGridView_DS" GridLines="None" CssClass="ProductsGrid" AlternatingRowStyle-CssClass="alt">
<AlternatingRowStyle CssClass="alt"></AlternatingRowStyle>
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Select" Text="Select"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False" CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure you want to delete this product?');"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" ReadOnly="True" SortExpression="Id" />
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
<asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" />
<asp:BoundField DataField="Gender" HeaderText="Gender" SortExpression="Gender" />
<asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" />
<asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" DataFormatString="{0:C}" />
<asp:CheckBoxField DataField="Available" HeaderText="Available" SortExpression="Available" />
<asp:BoundField DataField="Stock" HeaderText="Stock" SortExpression="Stock" />
<asp:HyperLinkField DataNavigateUrlFields="Id" DataNavigateUrlFormatString="UploadImage.aspx?Id={0}" Text="Upload Image" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="ProductsGridView_DS" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:db_1318766_zaraConnectionString %>" DeleteCommand="DELETE FROM [Products] WHERE [Id] = @original_Id AND [Name] = @original_Name AND [Description] = @original_Description AND [Gender] = @original_Gender AND [Type] = @original_Type AND [Price] = @original_Price AND (([Available] = @original_Available) OR ([Available] IS NULL AND @original_Available IS NULL)) AND [Stock] = @original_Stock" InsertCommand="INSERT INTO [Products] ([Name], [Description], [Gender], [Type], [Price], [Available], [Stock]) VALUES (@Name, @Description, @Gender, @Type, @Price, @Available, @Stock)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Products]" UpdateCommand="UPDATE [Products] SET [Name] = @Name, [Description] = @Description, [Gender] = @Gender, [Type] = @Type, [Price] = @Price, [Available] = @Available, [Stock] = @Stock WHERE [Id] = @original_Id AND [Name] = @original_Name AND [Description] = @original_Description AND [Gender] = @original_Gender AND [Type] = @original_Type AND [Price] = @original_Price AND (([Available] = @original_Available) OR ([Available] IS NULL AND @original_Available IS NULL)) AND [Stock] = @original_Stock">
<DeleteParameters>
<asp:Parameter Name="original_Id" Type="Int32" />
<asp:Parameter Name="original_Name" Type="String" />
<asp:Parameter Name="original_Description" Type="String" />
<asp:Parameter Name="original_Gender" Type="String" />
<asp:Parameter Name="original_Type" Type="String" />
<asp:Parameter Name="original_Price" Type="Decimal" />
<asp:Parameter Name="original_Available" Type="Boolean" />
<asp:Parameter Name="original_Stock" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Gender" Type="String" />
<asp:Parameter Name="Type" Type="String" />
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Available" Type="Boolean" />
<asp:Parameter Name="Stock" Type="Int32" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Gender" Type="String" />
<asp:Parameter Name="Type" Type="String" />
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Available" Type="Boolean" />
<asp:Parameter Name="Stock" Type="Int32" />
<asp:Parameter Name="original_Id" Type="Int32" />
<asp:Parameter Name="original_Name" Type="String" />
<asp:Parameter Name="original_Description" Type="String" />
<asp:Parameter Name="original_Gender" Type="String" />
<asp:Parameter Name="original_Type" Type="String" />
<asp:Parameter Name="original_Price" Type="Decimal" />
<asp:Parameter Name="original_Available" Type="Boolean" />
<asp:Parameter Name="original_Stock" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
</div>
1 ответ
Попробуйте упростить оператор удаления?
Пример:
DELETE FROM [Products] WHERE [Id] = @original_Id
Я говорю это потому, что вижу, что вы удаляете оператор требует: "И [Цена] = @original_Price". Ваше форматирование цены может повлиять на ваше заявление об удалении.
Следовательно, когда вы удалите его (форматирование цены). Кажется, все снова работает нормально.