我有一个使用templatefield CYQ2的gridview控件。我已使用Text = '<%# Bind("CYQ2","{0:$#,##0.00}") %>'
将字段格式化为html中的货币,并以货币格式显示该字段。当我在应用程序中更新值并点击“保存”按钮时,我收到的错误是“输入字符串的格式不正确”在下面粗体和斜体的行中。
protected void UpdateButton_Click(object sender, EventArgs e)
{
originalDataTable = (System.Data.DataTable)ViewState["originalValuesDataTable"];
foreach (GridViewRow r in GridView1.Rows)
***if (IsRowModified(r)) { GridView1.UpdateRow(r.RowIndex, false); }***
在IsRowModified事件(代码隐藏文件)中,使用
currentQ2 = Decimal.Parse(((TextBox)r.FindControl("CYQ2TextBox")).Text, NumberStyles.Currency);
我在代码隐藏文件中尝试了其他几种技术,如NumberStyles.AllowCurrencySymbol和CultureInfo.CurrentCulture,但没有任何效果。
这里要注意的是,如果我在HTML标记中使用以下内容(没有美元符号),它可以正常工作,但我需要显示美元符号。
Text = '<%# Bind("CYQ2","{0:#,##0.00}") %>'
有人可以帮忙吗?谢谢你的帮助。
附加信息(模板字段的完整HTML标记):
<asp:TemplateField HeaderText="Q2" SortExpression="CYQ2">
<EditItemTemplate>
<asp:TextBox ID="CYTextBox" runat="server" Text='<%# Bind("CYQ2") %>' Width="40"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="CYQ2TextBox" runat="server" MaxLength="20" Width="40"
Text = '<%# Bind("CYQ2","{0:$#,##0}") %>' Font-Names="Tahoma" Font-Size="8pt"></asp:TextBox>
</ItemTemplate>
<HeaderStyle Width="40px" Font-Names="Tahoma" Font-Size="8pt"/>
<ItemStyle Width="40px" HorizontalAlign="Right" />
</asp:TemplateField>
答案 0 :(得分:2)
问题在于,您使用的数据源控件具有简单的解析逻辑,可以在美元符号上窒息。幸运的是,GridView.RowUpdating
事件使您有机会在将行值发送到数据源控件之前对其进行操作。
在.aspx中,为OnRowUpdating="GridView1_RowUpdating"
添加GridView
属性,并按如下方式处理事件:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string value = e.NewValues["CYQ2"].ToString();
// "value" is the text entered by the user, including the dollar sign.
// Parse the value with the Currency style so that the data source can handle it:
e.NewValues["CYQ2"] = decimal.Parse(value, NumberStyles.Currency);
}