[英]How to differentiate updating or inserting in GridView OnUpdating Event?
[英]ASP.NET Gridview OnUpdating event not updating decimal value
我有一個帶有模板字段的ASP.NET 4.5 gridview控件,用於更新/插入/顯示3列表中的值。 因此,連接了一個onUpdating事件來處理更新。
我的問題是,當我輸入0、0.0或其他排列的0時,十進制列不會更新。使用正值或負值都可以正常工作,而其他可見列也可以更新。 另外,在小數點字段上插入帶有0的新行似乎也沒有問題。
我怎樣才能解決這個問題?
<asp:GridView ID="PriceGroupGv" runat="server" AllowPaging="true" AllowSorting="true" DataSourceID="PriceGroupEds" DataKeyNames="Id" AutoGenerateColumns="false"
ShowHeader="true" ShowHeaderWhenEmpty="false" ShowFooter="true" ItemType="Infrastructure.PricingGroup"
CssClass="table table-bordered table-condensed table-striped" AlternatingRowStyle-BackColor="GhostWhite" OnRowUpdating="PriceGroupGv_RowUpdating">
<EmptyDataTemplate>
<table class="table table-bordered table-condensed table-striped">
<tr>
<th>Name</th>
<th>Markup</th>
<th></th>
</tr>
<tr>
<td>
<asp:TextBox ID="NameTxt" runat="server" />
<asp:RequiredFieldValidator ID="NameRfv" runat="server" ControlToValidate="NameTxt" ValidationGroup="NewRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</td>
<td>
<asp:TextBox ID="MarkupTxt" runat="server"/>
<asp:RegularExpressionValidator ID="MarkupRxv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="NewRowVg" ValidationExpression="^(-)?\d+(\.\d\d)?$" ForeColor="Red">
#.#</asp:RegularExpressionValidator>
<asp:RequiredFieldValidator ID="MarkupRfv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="NewRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</td>
<td>
<asp:LinkButton ID="AddBtn" runat="server" Text="Add New" OnClick="AddBtn_Click" CommandArgument="EmptyData" CausesValidation="true"
ValidationGroup="NewRowVg"/>
</td>
</tr>
</table>
</EmptyDataTemplate>
<Columns>
<asp:BoundField DataField="Id" Visible="false" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label ID="NameLbl" runat="server" Text="<%# Item.Name %>" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="NameTxt" runat="server" Text="<%# Item.Name %>" />
<asp:RequiredFieldValidator ID="NameRfv" runat="server" ControlToValidate="NameTxt" ValidationGroup="EditRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="NameTxt" runat="server" />
<asp:RequiredFieldValidator ID="NameRfv" runat="server" ControlToValidate="NameTxt" ValidationGroup="NewRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Markup">
<ItemTemplate>
<asp:Label ID="MarkupLbl" runat="server" Text="<%# Item.Markup %>" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="MarkupTxt" runat="server" Text="<%# Item.Markup %>"/>
<%--<asp:RangeValidator ID="MarkupRngv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="EditRowVg" Type="Double"
MaximumValue="999.9999" MinimumValue="-999.9999" ForeColor="Red">
#.##</asp:RangeValidator>
<asp:RegularExpressionValidator ID="MarkupRxv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="EditRowVg" ValidationExpression="^(-)?\d+(\.\d\d)?$" ForeColor="Red">
#.#</asp:RegularExpressionValidator>--%>
<asp:RequiredFieldValidator ID="MarkupRfv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="EditRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="MarkupTxt" runat="server"/>
<asp:RangeValidator ID="MarkupRngv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="NewRowVg" Type="Double"
MaximumValue="999.9999" MinimumValue="-999.9999" ForeColor="Red">
#.##</asp:RangeValidator>
<%-- <asp:RegularExpressionValidator ID="MarkupRxv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="NewRowVg"
ValidationExpression="^(-)?\d+(\.\d\d)?$" ForeColor="Red">
#.#</asp:RegularExpressionValidator>--%>
<asp:RequiredFieldValidator ID="MarkupRfv" runat="server" ControlToValidate="MarkupTxt" ValidationGroup="NewRowVg" ForeColor="Red">
*</asp:RequiredFieldValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="EditBtn" runat="server" CommandName="Edit" Text="Edit" />
<asp:LinkButton ID="DeleteBtn" runat="server" CommandName="Delete" Text="Delete" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="UpdateBtn" runat="server" CommandName="Update" Text="Update" CausesValidation="true" ValidationGroup="EditRowVg" />
<asp:LinkButton ID="CancelBtn" runat="server" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<FooterTemplate>
<asp:LinkButton id="AddBtn" runat="server" Text="Add New" OnClick="AddBtn_Click" CommandArgument="NotEmpty" CausesValidation="true" ValidationGroup="NewRowVg" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:EntityDataSource ID="PriceGroupEds" runat="server" EnableInsert="true" EnableDelete="true" EnableFlattening="false" EnableUpdate="true" EntitySetName="PricingGroups"
ConnectionString="name=Entities" DefaultContainerName="Entities" />
代碼隱藏:
protected void PriceGroupGv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvr = (sender as GridView).Rows[e.RowIndex];
e.NewValues["Name"] = (gvr.FindControl("NameTxt") as TextBox).Text;
e.NewValues["Markup"] = Decimal.Parse((gvr.FindControl("MarkupTxt") as TextBox).Text);
PriceGroupGv.DataBind();
}// end event
已解決-使數據庫和模型中的標記列可為空。 我還在數據庫中將類型更改為Float,在模型中將類型更改為Double,但最終使它起作用的是具有nullable屬性。
如果其他人有更好的解決方案,我將歡迎其他任何答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.