366 lines
13 KiB
C#
366 lines
13 KiB
C#
#if FRAMEWORK20
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.DotNetBar.Validator
|
|
{
|
|
/// <summary>
|
|
/// Represents compare validator for SuperValidator control used to compare two input fields or input fields to specified value.
|
|
/// </summary>
|
|
public class CompareValidator : ValidatorBase
|
|
{
|
|
#region Constructors
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, string optionalValidationGroup)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.OptionalValidationGroup = optionalValidationGroup;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, string optionalValidationGroup, Control controlToCompare, eValidationCompareOperator compareOperator)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.OptionalValidationGroup = optionalValidationGroup;
|
|
this.ControlToCompare = controlToCompare;
|
|
this.Operator = compareOperator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, Control controlToCompare, eValidationCompareOperator compareOperator)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.ControlToCompare = controlToCompare;
|
|
this.Operator = compareOperator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, string optionalValidationGroup, object valueToCompare, eValidationCompareOperator compareOperator)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.OptionalValidationGroup = optionalValidationGroup;
|
|
this.ValueToCompare = valueToCompare;
|
|
this.Operator = compareOperator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, object valueToCompare, eValidationCompareOperator compareOperator)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.ValueToCompare = valueToCompare;
|
|
this.Operator = compareOperator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the RequiredFieldValidator class.
|
|
/// </summary>
|
|
public CompareValidator(string errorMessage, string optionalValidationGroup, Control controlToCompare, object valueToCompare, eValidationCompareOperator compareOperator)
|
|
{
|
|
this.ErrorMessage = errorMessage;
|
|
this.OptionalValidationGroup = optionalValidationGroup;
|
|
this.ControlToCompare = controlToCompare;
|
|
this.Operator = compareOperator;
|
|
this.ValueToCompare = valueToCompare;
|
|
}
|
|
#endregion
|
|
|
|
#region Implementation
|
|
public override bool Validate(System.Windows.Forms.Control input)
|
|
{
|
|
object leftValue = GetControlValue(input);
|
|
object rightValue = null;
|
|
if (_ControlToCompare != null)
|
|
rightValue = GetControlValue(_ControlToCompare);
|
|
else
|
|
rightValue = _ValueToCompare;
|
|
|
|
this.LastValidationResult = Compare(leftValue, rightValue, _Operator);
|
|
return LastValidationResult;
|
|
}
|
|
|
|
private Control _ControlToCompare = null;
|
|
/// <summary>
|
|
/// Gets or sets the control to compare validated control to.
|
|
/// </summary>
|
|
[DefaultValue(null), Category("Behavior"), Description("Indicates control to compare validated control to.")]
|
|
public Control ControlToCompare
|
|
{
|
|
get { return _ControlToCompare; }
|
|
set { _ControlToCompare = value; }
|
|
}
|
|
|
|
private string _ControlToCompareValuePropertyName="";
|
|
/// <summary>
|
|
/// Gets or sets the Value property name for the ControlToCompare control.
|
|
/// </summary>
|
|
[DefaultValue(""), Category("Behavior"), Description("Indicates Value property name for the ControlToCompare control.")]
|
|
public string ControlToCompareValuePropertyName
|
|
{
|
|
get { return _ControlToCompareValuePropertyName; }
|
|
set
|
|
{
|
|
_ControlToCompareValuePropertyName = value;
|
|
}
|
|
}
|
|
|
|
|
|
private object _ValueToCompare;
|
|
/// <summary>
|
|
/// Gets or sets the value to compare to the validation control.
|
|
/// </summary>
|
|
[DefaultValue((string)null), Category("Behavior"), Description("Indicates value to compare to the validation control."), TypeConverter(typeof(StringConverter))]
|
|
public object ValueToCompare
|
|
{
|
|
get { return _ValueToCompare; }
|
|
set { _ValueToCompare = value; }
|
|
}
|
|
|
|
private eValidationCompareOperator _Operator = eValidationCompareOperator.Equal;
|
|
/// <summary>
|
|
/// Gets or sets the operator used for comparison.
|
|
/// </summary>
|
|
[DefaultValue(eValidationCompareOperator.Equal), Category("Behavior"), Description("Indicates operator used for comparison")]
|
|
public eValidationCompareOperator Operator
|
|
{
|
|
get { return _Operator; }
|
|
set { _Operator = value; }
|
|
}
|
|
|
|
internal static bool Compare(object leftValue, object rightValue, eValidationCompareOperator compareOperator)
|
|
{
|
|
if (compareOperator == eValidationCompareOperator.DataTypeCheck)
|
|
{
|
|
if (leftValue != null && rightValue != null)
|
|
return leftValue.GetType().Equals(rightValue.GetType());
|
|
else
|
|
return leftValue == rightValue;
|
|
}
|
|
if (leftValue == null && rightValue == null) return true;
|
|
if (leftValue == null || rightValue == null) return false;
|
|
|
|
if (!leftValue.GetType().Equals(rightValue.GetType()) && rightValue is string)
|
|
{
|
|
object temp = null;
|
|
if (ConvertRightToLeftType(leftValue, rightValue, out temp))
|
|
rightValue = temp;
|
|
}
|
|
|
|
if (!leftValue.GetType().Equals(rightValue.GetType()))
|
|
return false;
|
|
|
|
int compareResult = 0;
|
|
|
|
if (leftValue is string)
|
|
compareResult = ((string)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is int)
|
|
compareResult = ((int)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is double)
|
|
compareResult = ((double)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is long)
|
|
compareResult = ((long)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is DateTime)
|
|
compareResult = ((DateTime)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is decimal)
|
|
compareResult = ((decimal)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is Single)
|
|
compareResult = ((Single)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is bool)
|
|
compareResult = ((bool)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is TimeSpan)
|
|
compareResult = ((TimeSpan)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is byte)
|
|
compareResult = ((byte)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is char)
|
|
compareResult = ((char)leftValue).CompareTo(rightValue);
|
|
else if (leftValue is Guid)
|
|
compareResult = ((Guid)leftValue).CompareTo(rightValue);
|
|
else
|
|
return true;
|
|
|
|
switch (compareOperator)
|
|
{
|
|
case eValidationCompareOperator.Equal:
|
|
return (compareResult == 0);
|
|
|
|
case eValidationCompareOperator.NotEqual:
|
|
return (compareResult != 0);
|
|
|
|
case eValidationCompareOperator.GreaterThan:
|
|
return (compareResult > 0);
|
|
|
|
case eValidationCompareOperator.GreaterThanEqual:
|
|
return (compareResult >= 0);
|
|
|
|
case eValidationCompareOperator.LessThan:
|
|
return (compareResult < 0);
|
|
|
|
case eValidationCompareOperator.LessThanEqual:
|
|
return (compareResult <= 0);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
internal static bool ConvertRightToLeftType(object leftValue, object rightValue, out object temp)
|
|
{
|
|
temp = null;
|
|
if (rightValue == null || leftValue == null || !(rightValue is string)) return false;
|
|
if (rightValue.GetType().Equals(leftValue.GetType()))
|
|
{
|
|
temp = rightValue;
|
|
return true;
|
|
}
|
|
|
|
Type type = leftValue.GetType();
|
|
string right = (string)rightValue;
|
|
|
|
if (type == typeof(int))
|
|
{
|
|
int result=0;
|
|
if (int.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(long))
|
|
{
|
|
long result = 0;
|
|
if (long.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(double))
|
|
{
|
|
double result = 0;
|
|
if (double.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(Single))
|
|
{
|
|
Single result = 0;
|
|
if (Single.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(DateTime))
|
|
{
|
|
DateTime result;
|
|
if (DateTime.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(TimeSpan))
|
|
{
|
|
TimeSpan result;
|
|
if (TimeSpan.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(bool))
|
|
{
|
|
bool result;
|
|
if (bool.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(byte))
|
|
{
|
|
byte result;
|
|
if (byte.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
else if (type == typeof(char))
|
|
{
|
|
char result;
|
|
if (char.TryParse(right, out result))
|
|
{
|
|
temp = result;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
return false;
|
|
}
|
|
#endregion
|
|
}
|
|
/// <summary>
|
|
/// Specifies the validation comparison operators used by the CompareValidator.
|
|
/// </summary>
|
|
public enum eValidationCompareOperator
|
|
{
|
|
/// <summary>
|
|
/// A comparison for equality.
|
|
/// </summary>
|
|
Equal,
|
|
/// <summary>
|
|
/// A comparison for inequality.
|
|
/// </summary>
|
|
NotEqual,
|
|
/// <summary>
|
|
/// A comparison for greater than.
|
|
/// </summary>
|
|
GreaterThan,
|
|
/// <summary>
|
|
/// A comparison for greater than or equal to.
|
|
/// </summary>
|
|
GreaterThanEqual,
|
|
/// <summary>
|
|
/// A comparison for less than.
|
|
/// </summary>
|
|
LessThan,
|
|
/// <summary>
|
|
/// A comparison for less than or equal to.
|
|
/// </summary>
|
|
LessThanEqual,
|
|
/// <summary>
|
|
/// A comparison for data type only.
|
|
/// </summary>
|
|
DataTypeCheck
|
|
}
|
|
}
|
|
#endif |