GridView - 输入字符串的格式不正确

时间:2013-08-06 19:24:07

标签: asp.net visual-studio-2010 c#-4.0

我有一个使用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>

1 个答案:

答案 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);
}