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); } } } } }
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); }
public BindingEntry(FieldEntry fe, Control c) { this.FieldEntry = fe; this.Control = c; }
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); } } } } }