GridView - input string was not in a correct format

I have a gridview control that uses templatefield CYQ2. I have formatted the field as currency in html using Text = '<%# Bind("CYQ2","{0:$#,##0.00}") %>' and it displays the field in the currency format. When I update values in the app and hit the save button, I get an error that says "input string was not in a correct format" at the line that is bold and italicized below.

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); }***

In the IsRowModified event(code behind file), am using

currentQ2 = Decimal.Parse(((TextBox)r.FindControl("CYQ2TextBox")).Text, NumberStyles.Currency);

I tried several other techniques such as NumberStyles.AllowCurrencySymbol and CultureInfo.CurrentCulture in the code behind file but nothing worked.

The point to note here is that if I use the following in the HTML markup(without dollar symbol), it works without nay issue but I need to display the dollar symbol. Text = '<%# Bind("CYQ2","{0:#,##0.00}") %>'

Can anyone please help? thanks for the help.

Additional Information(complete HTML markup of the templatefield):

<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>

Answers


The problem is that the data source control you're using has simplistic parsing logic that chokes on dollar signs. Fortunately, the GridView.RowUpdating event gives you a chance to manipulate row values before they're sent on to the data source control.

In your .aspx, add an OnRowUpdating="GridView1_RowUpdating" attribute to your GridView, and handle the event like so:

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

Need Your Help

using IF condition to change imageview

android json string imageview android-adapter

this app will get get son from server. The value that I want to use is categoryid. you know clearly in the code below.

Android camera- always uses front camera

android cordova android-camera

I am creating a phonegap android application which records videos. I am testing it on Android 2.3.5 device. Problem is that it always opens front camera. But I want it to use back camera. See my c...

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.