Pregunta: | 7259 - QUIERO UTILIZAR EL FIND |
Autor: | Hermann s |
tengo en una ventana un single line edit, y luego tengo una datawindow en forma grid con datos de clientes,nombre y rut lo que quiero hacer es que cuando yo digite una letra en el single line edit me busque en la datawindow el primer nombre que comience con esa letra y lo destaque en la datawindow. |
Respuesta: | Victor //:-) Arreola |
Teniendo la sle y la dw en una window, yo haria esto:
En el evento KEY de la Window pon esto: -- long ll_reg=0 string ls_busco='' ls_busco=trim(sle_1.text) if not(isnull(ls_busco)) and len(ls_busco)>0 then ll_reg = dw_1.Find(" nombre like '%"+ls_busco+"'", 1, dw_1.RowCount()) if ll_reg>0 then dw_1.SetRow(ll_reg) dw_1.SelectRow(0, FALSE) dw_1.SelectRow(ll_reg, TRUE) dw_1.ScrollToRow(ll_row) end if end if -- PD: Esto localiza el PREFIJO mas parecido, pero tambien puedes buscar el CONTENIDO mas parecido cambiando esto : " nombre like '%"+ls_busco+"%'" -- Espero te sirva. Atte Victor //:-) |
Respuesta: | Jorge Reynoso |
Debes crear dentro del Control datawindos un evento de usuario
Por ejemplo: ue_keyup con el Event ID -> pbm_keyup y alli poner el siguiente codigo Long ll_row integer li_key, li_temp, li_pos String ls_column, ls_temp li_key = Message.WordParm ls_temp = THIS.Describe(\"DataWindow.Table.Sort\") li_pos = Pos(ls_temp,\",\") li_temp = Pos(ls_temp,\"A\") If (li_temp=0) or (li_temp > li_pos) then //li_temp = Pos(ls_temp,\"D\") End if ls_column=left(ls_temp,li_temp -1) if ((li_key > 64) and (li_key < 91)) or ((li_key > 47) and (li_key < 58)) then if li_key = ii_last_key then ll_row= THIS.GetRow()+1 else ll_row=1 end if ls_temp=\"Asc(Upper(left(\"+ls_column+\",1)))>=\"+String(li_key) ll_row=this.find(ls_temp,ll_row,this.rowcount()) if ll_row > 0 then this.selectrow(0,false) this.selectrow(ll_row,true) this.ScrollToRow(ll_row) this.SetRow(ll_row) end if ii_last_key = li_key end if Espero que te sirva Saludos |