예제 #1
0
 void ConstructSearchParameters()
 {
     foreach (BindingEntry be in this.bindings)
     {
         Type       t    = be.FieldEntry.FieldInfo.FieldType;
         string     name = be.FieldEntry.FieldInfo.Name;
         FieldEntry fe   = be.FieldEntry;
         if (t == typeof(bool))
         {
             CheckBox cb = (CheckBox)be.Control;
             if (cb.CheckState != CheckState.Indeterminate)
             {
                 fe.Value = cb.Checked;
                 this.searchParams.Add(fe);
             }
         }
         else if (t == typeof(DateTime))
         {
             DateTimePicker dtp = (DateTimePicker)be.Control;
             if (dtp.Value != dtp.MinDate)
             {
                 fe.Value = dtp.Value;
                 this.searchParams.Add(fe);
             }
         }
         else
         {
             TextBox tb = (TextBox)be.Control;
             if (tb.Text.Trim() != string.Empty)
             {
                 try
                 {
                     fe.Value = Convert.ChangeType(tb.Text, t);
                 }
                 catch {}
                 if (fe.Value != null)
                 {
                     this.searchParams.Add(fe);
                 }
             }
         }
     }
 }
예제 #2
0
        public ObjectPropertyForm(object displayedObject, bool isSearchTemplate)
        {
            this.displayedObject  = (IPersistenceCapable)displayedObject;
            this.isSearchTemplate = isSearchTemplate;
            InitializeComponent();

            SuspendLayout();
            this.lblRetrieveAll.Visible = isSearchTemplate;

            this.Text = displayedObject.GetType().Name + " Properties";

            List <FieldEntry> fieldEntries = FieldEntry.GetFieldEntries(displayedObject.GetType(), mapping);

            foreach (FieldEntry fe in fieldEntries)
            {
                string    name = fe.FieldMapping.Column.Name;
                Type      t    = fe.FieldInfo.FieldType;
                FieldInfo fi   = fe.FieldInfo;
                CreateLabel(name);
                if (t == typeof(DateTime))
                {
                    DateTimePicker dtp = CreateDateTimePicker(name);
                    if (!isSearchTemplate)
                    {
                        DateTime dt = (DateTime)fi.GetValue(this.displayedObject);
                        if (dt == DateTime.MinValue)
                        {
                            dt = dtp.MinDate;
                        }
                        dtp.Value = dt;
                    }
                    else
                    {
                        dtp.Value = dtp.MinDate;
                    }
                    bindings.Add(new BindingEntry(fe, dtp));
                }
                else if (t == typeof(bool))
                {
                    CheckBox cb = CreateCheckBox(name);
                    cb.Checked = (bool)fi.GetValue(this.displayedObject);
                    bindings.Add(new BindingEntry(fe, cb));
                    if (isSearchTemplate)
                    {
                        cb.CheckState = CheckState.Indeterminate;
                    }
                }
                else
                {
                    TextBox tb = CreateTextBox(name);
                    if (!isSearchTemplate)
                    {
                        object o = fi.GetValue(this.displayedObject);
                        tb.Text = (null == o ? string.Empty : o.ToString());
                    }
                    else
                    {
                        tb.Text = string.Empty;
                    }
                    bindings.Add(new BindingEntry(fe, tb));
                }
            }

            this.ClientSize = new Size(formWidth, (Row + 1) * 36 + 100);

            ResumeLayout(true);
        }
예제 #3
0
 public BindingEntry(FieldEntry fe, Control c)
 {
     this.FieldEntry = fe;
     this.Control    = c;
 }
예제 #4
0
        void AssignProperties()
        {
            // We check first, if there is a property change.
            // If there was no property change, the object won't be touched
            // and thus won't be saved.
            foreach (BindingEntry be in this.bindings)
            {
                FieldEntry fe      = be.FieldEntry;
                FieldInfo  fi      = fe.FieldInfo;
                Control    control = be.Control;

                if (fi.FieldType == typeof(DateTime))
                {
                    DateTime oldDt = (DateTime)fi.GetValue(displayedObject);
                    DateTime newDt = ((DateTimePicker)control).Value;
                    if (newDt == ((DateTimePicker)control).MinDate)
                    {
                        newDt = DateTime.MinValue;
                    }
                    if (oldDt != newDt)
                    {
                        fi.SetValue(this.displayedObject, newDt);
                        this.displayedObject.NDOMarkDirty();
                    }
                }
                else if (fi.FieldType == typeof(bool))
                {
                    bool oldBool = (bool)fi.GetValue(displayedObject);
                    bool newBool = ((CheckBox)control).Checked;
                    if (oldBool != newBool)
                    {
                        fi.SetValue(this.displayedObject, newBool);
                        this.displayedObject.NDOMarkDirty();
                    }
                }
                else if (fi.FieldType == typeof(string))
                {
                    string oldString = (string)fi.GetValue(displayedObject);
                    if (oldString == null)
                    {
                        oldString = string.Empty;
                    }
                    string newString = ((TextBox)control).Text.Trim();
                    if (oldString != newString)
                    {
                        fi.SetValue(this.displayedObject, newString);
                        this.displayedObject.NDOMarkDirty();
                    }
                }
                else
                {
                    object oldObject = fi.GetValue(displayedObject);
                    string oldVal    = (oldObject == null ? string.Empty : oldObject.ToString());

                    string newVal = ((TextBox)control).Text.Trim();
                    // Empty strings are invalid, because the PropertyType is not a string.
                    if (newVal != string.Empty && oldVal != newVal)
                    {
                        object o = null;
                        try
                        {
                            o = System.Convert.ChangeType(newVal, fi.FieldType);
                        }
                        catch { } // Input not convertible
                        if (o != null)
                        {
                            fi.SetValue(this.displayedObject, o);
                        }
                    }
                }
            }
        }