using System; using System.ComponentModel; using FastReport.Utils; using System.Drawing.Design; namespace FastReport.Data { /// /// This class represents a single parameter to use in the "select" command. /// public class CommandParameter : Base { private enum ParamValue { Uninitialized } #region Fields private int dataType; private int size; private string expression; private string defaultValue; private object value; private object lastValue; #endregion #region Properties /// /// Gets or sets the parameter's data type. /// [TypeConverter(typeof(FastReport.TypeConverters.ParameterDataTypeConverter))] [Category("Data")] [Editor("FastReport.TypeEditors.ParameterDataTypeEditor, FastReport", typeof(UITypeEditor))] public int DataType { get { return dataType; } set { dataType = value; } } /// /// Gets or sets the size of parameter's data. /// /// /// This property is used if the property is set to String. /// [DefaultValue(0)] [Category("Data")] public int Size { get { return size; } set { size = value; } } /// /// Gets or sets an expression that returns the parameter's value. /// /// /// If this property is not set, the property will be used /// to obtain a parameter's value. /// [Category("Data")] [Editor("FastReport.TypeEditors.ExpressionEditor, FastReport", typeof(UITypeEditor))] public string Expression { get { return expression; } set { expression = value; } } /// /// Gets or sets a default value for this parameter. /// /// /// This value is used when you designing a report. Also it is used when report is running /// in case if you don't provide a value for the property. /// public string DefaultValue { get { return defaultValue; } set { defaultValue = value; this.value = null; } } /// /// Gets or sets the parameter's value. /// [Browsable(false)] public object Value { get { if (!String.IsNullOrEmpty(Expression) && Report.IsRunning) value = Report.Calc(Expression); if (value == null) value = new Variant(DefaultValue); return value; } set { this.value = value; } } /// /// This property is not relevant to this class. /// [Browsable(false)] public new Restrictions Restrictions { get { return base.Restrictions; } set { base.Restrictions = value; } } internal Type GetUnderlyingDataType { get { if (Parent is TableDataSource && Parent.Parent is DataConnectionBase) return (Parent.Parent as DataConnectionBase).GetParameterType(); return null; } } internal object LastValue { get { return lastValue; } set { lastValue = value; } } #endregion #region Public Methods /// public override void Serialize(FRWriter writer) { CommandParameter c = writer.DiffObject as CommandParameter; base.Serialize(writer); if (DataType != c.DataType) writer.WriteInt("DataType", DataType); if (Size != c.Size) writer.WriteInt("Size", Size); if (Expression != c.Expression) writer.WriteStr("Expression", Expression); if (DefaultValue != c.DefaultValue) writer.WriteStr("DefaultValue", DefaultValue); } /// public override string[] GetExpressions() { return new string[] { Expression }; } internal void ResetLastValue() { LastValue = ParamValue.Uninitialized; } #endregion /// /// Initializes a new instance of the class with default settings. /// public CommandParameter() { Expression = ""; DefaultValue = ""; SetFlags(Flags.CanEdit | Flags.CanCopy, false); } } }