Files
Pilz/Pilz.UI.Telerik/Controls/RadValidationProvider/RadValidationRuleWithTargetControlEx.cs
2025-04-23 12:02:59 +02:00

100 lines
3.0 KiB
C#

using System.ComponentModel;
//using System.Linq;
namespace Pilz.UI.Telerik.Controls.RadValidationProvider;
/// <summary>
/// RadValidationRuleWithTargetControl provides a validation logic which compares RadControl's Property with TargetControl's property.
/// </summary>
public class RadValidationRuleWithTargetControlEx : RadValidationRuleEx
{
private string sourceControlPropertyName = "Text";
public RadValidationRuleWithTargetControlEx()
{
}
/// <summary>
/// Gets or sets the Target Control. This control's property value will be used in the Rule evaluation.
/// </summary>
[DefaultValue(null)]
public Control TargetControl { get; set; }
/// <summary>
/// The name of the property that will be used in the Rule evaluation.
/// </summary>
[DefaultValue("Text")]
public string TargetControlPropertyName
{
get { return this.sourceControlPropertyName; }
set { this.sourceControlPropertyName = value; }
}
/// <summary>
/// Gets the Rule expression.
/// </summary>
/// <value>The Rule expression.</value>
public override string Expression
{
get
{
if (this.TargetControl != null)
{
this.Value = this.CalculateValue();
}
return base.Expression;
}
}
/// <summary>
/// Gets or sets the Value of this rule. Controls in the rule will be evaluated against this value.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override object Value
{
get
{
if (this.TargetControl != null && !string.IsNullOrEmpty(this.TargetControlPropertyName))
{
try
{
base.Value = RadValidationProviderEx.GetSubPropertyValue(TargetControl, TargetControlPropertyName);//TargetControl.GetType().GetProperty(TargetControlPropertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).GetValue(TargetControl, null);
}
catch { }
}
return base.Value;
}
set
{
base.Value = value;
}
}
protected virtual object CalculateValue()
{
if (this.TargetControl.Site != null)
{
return string.Format("{0}.{1}", this.TargetControl.Name, this.TargetControlPropertyName);
}
if (!string.IsNullOrEmpty(this.TargetControlPropertyName))
{
try
{
return RadValidationProviderEx.GetSubPropertyValue(TargetControl, TargetControlPropertyName);//this.TargetControl.GetType().GetProperty(this.TargetControlPropertyName, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance).GetValue(this.TargetControl, null);
}
catch
{ }
}
return null;
}
}