miércoles, 6 de julio de 2016

Controlar Evento Cambio de Focus en Fechas

Para controlar el cambio de foco en fechas se hace lo siguiente:
Creamos una bandera para saber si se presiono la tecla tabuladora o la tecla shift, tambien nos servira para cuando el control de la fecha pierda el foco.
bool banderaFrom = false;

Activamos el evento KeyDown del control.
void dateFrom_KeyDown(object sender, ystem.Windows.Forms.KeyEventArgs e) {
  if (e.KeyCode != Keys.Tab && e.KeyCode != Keys.ShiftKey) {
        banderaFrom = true;
        dateFrom.EditValueChanged -= dateFrom_EditValueChanged;
  }
  else if (banderaFrom) {
        banderaFrom = false;
        dateFrom_EditValueChanged(sender, new EventArgs());
        dateFrom.EditValueChanged += dateFrom_EditValueChanged;
  }
 }
Creamos el metodo LostFocus ya que este no se encuentra en el control:
void dateFrom_LostFocus(object sender, System.EventArgs e) {
   BaseRuntime.Trace("hcecli", "histórico", "dateFrom_LostFocus");

  if (banderaFrom) {
       banderaFrom = false;
       dateFrom_EditValueChanged(sender, new EventArgs());
       dateFrom.EditValueChanged += dateFrom_EditValueChanged;
  }
}
Pegamos al control en la parte del Designer el evento de la siguiente forma:
this.dateFrom.LostFocus += new System.EventHandler(this.dateFrom_LostFocus);

Errores en HCECLI

Estos son los errores presentados en HCECLI:


1.


Solución: Estos son errores relacionados con el WorkFlow (en nuestro caso el de NOTASI). Lo mas ideal es dirigirse al Trace y observar en que parte del flujo de trabajo revento.

2.



Solución: Lo mas seguro es que la consulta a la base de datos se esta realizando en un hilo diferente al principal del programa. Se debe buscar el hilo o método donde se esta realizando la consulta, y llamar al método CultureConfig.SetRegionalConfiguration(). Esto asegura que al traer los datos de la tabla, tengan el formato correcto y no provoque un crashOverrider del programa.

3.



Solución: El datareader se utiliza dentro de un using(), asi como en la imagen siguiente:

4.



Solución: Cuando son errores de asignación de tipos de datos en los queries de informix, debemos setear la configuración regional en el hilo donde se esta realizando la lógica, pues lo más seguro es que se perdió la configuración regional por alguna razón.

Creación ToolTip

private void authorizedtoolTipController_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e) 
{
GridHitInfo hi =      normalView.CalcHitInfo(normalView.GridControl.PointToClient(Control.MousePosition));
 ToolTipControlInfo info = null;

 if (hi != null && hi.RowHandle >= 0) 
 {
   string str = e.SelectedControl.ToString();
   object o = hi.HitTest.ToString() + hi.RowHandle.ToString();
   if (hi.InRowCell) 
   {
     string text = String.Empty;
     if (hi.Column == colAuthorizedState) 
     {
       var colValue = normalView.GetRowCellValue(hi.RowHandle, colAuthorizedState);
       switch (colValue.ToStringValue()) 
       {
         case "AP":
           if (dtimage != null) {
           text = (from item in dtimage.AsEnumerable()
           where item.Field("indimaind") == "ACAU"
           select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         case "PE":
           if (dtimage != null) 
           {
             text = (from item in dtimage.AsEnumerable()
             where item.Field("indimaind") == "PEAU"
             select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         case "NO":
           if (dtimage != null) 
           {
            text = (from item in dtimage.AsEnumerable()
            where item.Field("indimaind") == "NOAU"
            select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         default:
           break;
       }
    }
    if (hi.Column == colObservation) 
    {
    text = normalView.GetRowCellValue(hi.RowHandle, colObservation).ToStringValue();
    }
    info = new ToolTipControlInfo(o, text);
   }
 }
   if (info != null)
      e.Info = info;
}