Version

ParseValue Event

Fired when a CalcSetting retrieves a value from a control
Syntax
'Declaration
 
Public Event ParseValue As ParseValueEventHandler
public event ParseValueEventHandler ParseValue
Event Data

The event handler receives an argument of type ParseValueEventArgs containing data related to this event. The following ParseValueEventArgs properties provide information specific to this event.

PropertyDescription
Control (Inherited from Infragistics.Win.UltraWinCalcManager.ControlValueEventArgsBase)Gets the Control whose property is being read or written.
Handled Gets / Sets whether the Parsing was handled.
Value (Inherited from Infragistics.Win.UltraWinCalcManager.ControlValueEventArgsBase)Gets/Sets the value which is being sent from the CalcManager to the control or the control to the CalcManager
Remarks

ParseValue event is fired any time a CalcSettings retrieves a value from a control. The Value can then be modified by before it passed back to the CalcManager for the purposes of formatting, type conversion, etc.

Note that if a control is both the source and target of a formula, the ParseValue event will not fire because the CalcManager does not retrive the value from the control. Instead, the CalcManager uses the calculated result of the formula. This means that a control that is being used as both source and target can safely be Formatted using the FormatValue event without the need to reverse the formatting.

Example
Following code demonstrates the usage of FormatValue and ParseValue events.

For an overview of how to handle events in Visual Basic or Visual C#, see Event Handlers in Visual Basic and Visual C#. For specific information and code examples illustrating how to consume events in your application, see Consuming Events in the .NET Framework Developer's Guide.

Imports Infragistics.Shared
Imports Infragistics.Win
Imports Infragistics.Win.UltraWinGrid
Imports Infragistics.Win.CalcEngine
Imports Infragistics.Win.UltraWinCalcManager

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Ensure that the form contains an UltraCalcManager and two textboxes, 
        ' one named textBox1 and the other named textBox2.
        Dim calcSettings As CalcSettings = New CalcSettings()
        ' This formula will multiply the value of textBox2 by 2.
        calcSettings.Formula = "2 * [textBox2]"
        calcSettings.PropertyName = "Text"
        Me.UltraCalcManager1.SetCalcSettings(Me.TextBox1, calcSettings)

        calcSettings = New CalcSettings()
        calcSettings.PropertyName = "Text"
        ' Treat the values of the textBox2 as double. Text property of TextBox is
        ' a string type and since textBox2 is a source of value to a formula, indicate 
        ' to the calc-manager that the value should be treated as a double rather
        ' than as a string. 
        calcSettings.TreatAsType = GetType(Double)
        Me.UltraCalcManager1.SetCalcSettings(Me.TextBox2, calcSettings)
    End Sub

    Private Sub UltraCalcManager1_ParseValue(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinCalcManager.ParseValueEventArgs) Handles ultraCalcManager1.ParseValue
        ' ParseValue gets fired on all controls that are source of values in formulas.
        If e.Control Is Me.textBox2 Then
            ' Get the text of the textBox2.
            Dim text As String = Me.textBox2.Text

            If 0 = text.Length Then
                ' If the textbox is empty, then you can return an error. By default the 
                ' calc manager considers empty strings to be 0.
                e.Value = New UltraCalcValue(New UltraCalcErrorValue(UltraCalcErrorCode.Num, "Not a Number"))
            Else
                ' Otherwise parse the text to a double and return that as the value. 
                ' The calc manager by default uses InvariantCulture to parse text into
                ' numeric values. Typically you want to use the current culture to parse
                ' text into numeric values. ParseValue event is especially useful for that.
                e.Value = New UltraCalcValue(Double.Parse(text))
            End If

            e.Handled = True
        End If
    End Sub

    Private Sub UltraCalcManager1_FormatValue(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinCalcManager.FormatValueEventArgs) Handles ultraCalcManager1.FormatValue
        ' FormatValue gets fired on all controls that are target of formula evaluations.
        If e.Control Is Me.textBox1 Then
            If e.CalcValue.IsError Then
                ' There was an error in formula evaluation.
                e.Value = e.CalcValue.ToErrorValue().Message
            ElseIf e.CalcValue.IsDBNull Or e.CalcValue.IsNull Then
                ' Result is DBNull or Null.
                e.Value = "(NULL)"
            Else
                Dim doubleVal As Double
                If e.CalcValue.ToDouble(doubleVal) Then
                    ' ToDouble returns true if the value was a double.
                    e.Value = CType(doubleVal, Decimal).ToString("c")
                Else
                    ' Otherwise convert the value to a string using current culture.
                    e.Value = e.CalcValue.ToString(System.Globalization.CultureInfo.CurrentCulture)
                End If
            End If
        End If
    End Sub
using Infragistics.Shared;
using Infragistics.Win;
using Infragistics.Win.UltraWinGrid;
using System.Diagnostics;
using Infragistics.Win.CalcEngine;
using Infragistics.Win.UltraWinCalcManager;

		private void Form1_Load(object sender, System.EventArgs e)
		{
			// Ensure that the form contains an UltraCalcManager and two textboxes, 
			// one named textBox1 and the other named textBox2.
			CalcSettings calcSettings = new CalcSettings( );
			// This formula will multiply the value of textBox2 by 2.
			calcSettings.Formula = "2 * [//textBox2]";
			calcSettings.PropertyName = "Text";
			this.ultraCalcManager1.SetCalcSettings( this.textBox1, calcSettings );

			calcSettings = new CalcSettings( );
			calcSettings.PropertyName = "Text";
			// Treat the values of the textBox2 as double. Text property of TextBox is
			// a string type and since textBox2 is a source of value to a formula, indicate 
			// to the calc-manager that the value should be treated as a double rather
			// than as a string. 
			calcSettings.TreatAsType = typeof( double );
			this.ultraCalcManager1.SetCalcSettings( this.textBox2, calcSettings );
		}

		private void ultraCalcManager1_ParseValue(object sender, Infragistics.Win.UltraWinCalcManager.ParseValueEventArgs e)
		{
			// ParseValue gets fired on all controls that are source of values in formulas.
			if ( e.Control == this.textBox2 )
			{
				// Get the text of the textBox2.
				string text = this.textBox2.Text;
				
				if ( 0 == text.Length )
				{
					// If the textbox is empty, then you can return an error. By default the 
					// calc manager considers empty strings to be 0.
					e.Value = new UltraCalcValue( new UltraCalcErrorValue( UltraCalcErrorCode.Num, "Not a Number" ) );
				}
				else
				{
					// Otherwise parse the text to a double and return that as the value. 
					// The calc manager by default uses InvariantCulture to parse text into
					// numeric values. Typically you want to use the current culture to parse
					// text into numeric values. ParseValue event is especially useful for that.
					e.Value = new UltraCalcValue( double.Parse( text ) );
				}

				e.Handled = true;
			}
		}

		private void ultraCalcManager1_FormatValue(object sender, Infragistics.Win.UltraWinCalcManager.FormatValueEventArgs e)
		{
			// FormatValue gets fired on all controls that are target of formula evaluations.
			if ( e.Control == this.textBox1 )
			{
				if ( e.CalcValue.IsError )
				{
					// There was an error in formula evaluation.
					e.Value = e.CalcValue.ToErrorValue( ).Message;
				}
				else if ( e.CalcValue.IsDBNull || e.CalcValue.IsNull )
				{
					// Result is DBNull or Null.
					e.Value = "(NULL)";
				}
				else 
				{
					double doubleVal;
					if ( e.CalcValue.ToDouble( out doubleVal ) )
					{
						// ToDouble returns true if the value was a double.
						e.Value  = ((decimal)doubleVal).ToString( "c" );
					}
					else
					{
						// Otherwise convert the value to a string using current culture.
						e.Value = e.CalcValue.ToString( System.Globalization.CultureInfo.CurrentCulture );
					}
				}
			}
		}
Requirements

Target Platforms: Windows 10, Windows 8.1, Windows 8, Windows 7, Windows Server 2012, Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also