31/7/09

Crear campo de tabla padre

Permite mostrar valores de nombre en tablas que solo almacenan el Id.

dsOracle.EQUIPODAT.Columns.Add("NombMotivoBaja", typeof(string), "Parent(FK_Equipodat_Motivo_Baja).nombre");

dsOracle == El dataset
EQUIPODAT == La tabla.
importante el: Parent(la relación).el_campo

3/7/09

DataBinding con DateTimePicker

Un coñazo. Además no había encontrada nada en Internet que me funcionase.
La parte de código maneja el evento del parse y el format había que ponerlo en alguna clase común.

Hay que crear una variable en la clase para almacenar el binding y poder referenciarlo desde el FormClosing.

Binding BindingFIni;


En el constructor. Yo lo paso a un “InicializarComponentes()”

private void InicializarComponentes() {
BindingFIni = new Binding("Value", Program.dm.OrganoBindingSource, Program.dm.dsOracle.ORGANO.FINIColumn.ColumnName);
BindingFIni.Format += new ConvertEventHandler(BindingFIni_Format);
BindingFIni.Parse += new ConvertEventHandler(BindingFIni_Parse);
this.dtpFIni.DataBindings.Add(BindingFIni);
this.dtpFIni.Value = DateTime.Today;// Sin estas 2 líneas no funciona, lo que no se es porqué.
BindingFIni.WriteValue();// Línea necearia
// Ojo: Tambien es neceario incluir líneas en el FormClosing
}

El código de los eventos es:

void BindingFIni_Parse(object sender, ConvertEventArgs e) {//Se llama al grabar
DateTimePicker dtp = ((Binding)sender).Control as DateTimePicker;
if (dtp != null && !dtp.Checked) {
e.Value = DBNull.Value;
}
}
void BindingFIni_Format(object sender, ConvertEventArgs e) {// Se llama al leer
if (e.Value is System.DBNull) {
DateTimePicker dtp = ((Binding)sender).Control as DateTimePicker;
e.Value = DateTime.Today;
dtp.Checked = false;
}
}

Por último al final del “FormClosing” hay que eliminar el Binding porque si no se ejecutan los eventos pese a que el formulario esté cerrado.

private void FE_FormClosing(object sender, FormClosingEventArgs e) {
//Aquí las comprovaciones necesarias
if (!e.Cancel) {
// Si no se hace esto sigue ejecutando el format aunque este formulario esté cerrado.
this.dtpFIni.DataBindings.Remove(this.BindingFIni);
}
}