Power Builder - Multiple Seleccion en un DW

   
Vista:

Multiple Seleccion en un DW

Publicado por Perez Gill (24 intervenciones) el 23/10/2009 15:29:37
Hola a todos.Mi problema es que tengo un DW con una consulta de 30 registros por ejm. Y yo quiero saltear la seleccion de algunos registros, por ejemplo quiero elegir 3 registros de los 30. Por ejemplo (en posicion de aparicion-renglon): el nro 3, el 7 , y el 16 (estos son devueltos a otro DW). Me explico ?
O para que lo entiendan mejor: Quiero cambiar de color los renglones(de todas las columnas) del DW, que yo elija en una consulta. En una consulta que ocupa 20 renglones, quiero cambiar de color el 5,8,12(Pos. de renglones)->Presionando SPACE
Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 23/10/2009 16:31:14
hola,

si te vale el fondo azul por defecto de windows:
-----------------------------------------------------------------
(me quedo con las 3 filas (=renglones?) últimas que mencionas.)

// deseleccionar todos por si hay
dw_1.selectrow(0, false)

dw_1.selectrow(5, true)
dw_1.selectrow(8, true)
dw_1.selectrow(12, true)

si esto quieres hacer cuando se pulsa la tecla 'espacio en blanco' tienes que
codificarlo en el evento pbm_dwnkey, que primero tendrás que añadir como evento nuevo a tu control de datawindow:
------------
long ll_fila
if key = keySpaceBar! then
// tu código de (de)selección de filas
ll_fila = this.getrow()
// tu código....
messagebox('debug', 'fila: ' + string(ll_fila) )
// .....
end if

si NO te vale el fondo azul por defecto de windows:
-----------------------------------------------------------------
tendrás que asignar un color a cada columna en la fila dependiendo de alguna
columna que añades al select del dw:
select 0 as 'otro_color', ..... resto de tus columnas, etc.

en el evento pbm_dwnkey, en vez de hacer selectRow ( ) tendrás que asignar un valor 1 a la fila que quieras.

luego puedes codificar la propiedad el color / backgroundcolor de cada columna dependiendo del valor de la
columna otro_color:
if ( otro_color = 0, rgb( 0, 0, 0), rgb( ... otro color que quieras usar) )

Espero que te haya ayudado,
saludos,
Miguel

Nota:
te doy una lista de keycodes (obtenido de la ayuda de powerbuilder buscando la función 'keydown()':
---------------------------
Type of key KeyCode values and descriptions
Mouse buttons KeyLeftButton! Left mouse buttonKeyMiddleButton! Middle mouse buttonKeyRightButton! Right mouse button
Letters KeyA! - KeyZ! A - Z, uppercase or lowercase
Other symbols KeyQuote! ' and "KeyEqual! = and +KeyComma! , and <KeyDash! - and _KeyPeriod! . and >KeySlash! / and ?KeyBackQuote! ` and ~KeyLeftBracket! [ and {KeyBackSlash! \ and |KeyRightBracket! ] and }KeySemiColon! ; and :
Non-printing characters KeyBack! BackspaceKeyTab!KeyEnter!KeySpaceBar!
Function keys KeyF1! - KeyF12! Function keys F1 to F12
Control keys KeyShift!KeyControl!KeyAlt!KeyPause!KeyCapsLock!KeyEscape!KeyPrintScreen!KeyInsert!KeyDelete!
Navigation keys KeyPageUp!KeyPageDown!KeyEnd!KeyHome!KeyLeftArrow!KeyUpArrow!KeyRightArrow!KeyDownArrow!
Numeric and symbol keys Key0! 0 and )Key1! 1 and !Key2! 2 and @Key3! 3 and #Key4! 4 and $Key5! 5 and %Key6! 6 and ^Key7! 7 and &Key8! 8 and *Key9! 9 and (
Keypad numbers KeyNumpad0! - KeyNumpad9! 0 - 9 on numeric keypad
Keypad symbols KeyMultiply! * on numeric keypadKeyAdd! + on numeric keypadKeySubtract! - on numeric keypadKeyDecimal! . on numeric keypadKeyDivide! / on numeric keypadKeyNumLock!KeyScrollLock!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por Perez Gill (24 intervenciones) el 23/10/2009 21:43:53
Hola Miguel.
Mira suponiendo que en un DW tenemos los siguientes renglones con 3 columnas:

codigo apeynom deuda
3355 MONCASI PABLO 15.85
7788 PODESTA JULIO 25.89
4433 HERRERA MARIO 35.69
8877 DOMIJEAN JULIO 12.55

Lo que quiero es cambiar el fondo de color del renglon 1(3355 MONCASI PABLO) y 3(4433 HERRERA MARIO) , como si estuvieran seleccionados, o hay alguna forma de seleccionar asi en el DW ?

Otra:
Como hago para resetear (volver a nulo) los controles de un formulario, por medio del tab order (o lo que sea), en un bucle FOR NEXT.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 25/10/2009 00:09:55
Hola,

A)
sobre lo de los colores ya te contesté en mi anterior respuesta. No sé si me explico mejor, preguntame lo que no hayas entendido. (en resumen tienes que meter una expresión en el atributo backgroundcolor de cada columna).

B)
sobre la forma de limpiar con un FOR todos los contenidos de las columnas:de un formulario (asumiendo que con formulario quieres decir datawindow?):
puedes resetear todo el datawindow de golpe haciendo un dw_1.reset( ) pero bien si lo quieres hacer con un bucle FOR, aquí te digo como hacerlo:

tengo una ventana con un botón 'limpiar datos' y un control de datawindow que se llama: dw_mantenimiento. (tendrás que reemplazar en el código el dw_mantenimiento con el nombre de tu control de dw).
El siguiente código lo tengo en el evento clicked de mi boton 'limpiar datos':
//----------------------------
int li_max_cols, li_i
long ll_fila, ll_max_filas
string ls_col, ls_tipo
// variables para asignar nulos
date ld_nulo
datetime ldt_nulo
time lt_nulo
string ls_nulo
int li_nulo
// asignarles un valor nulo (no son nulo por su declaración en si, hay que hacerlo manualmente)
setnull( ld_nulo); setnull( ldt_nulo); setnull(lt_nulo); setnull(ls_nulo); setnull(li_nulo)

if not len(dw_mantenimiento.dataobject) > 0 then return

ll_max_filas = dw_mantenimiento.rowcount()
li_max_cols = integer(dw_mantenimiento.Object.DataWindow.Column.Count)
for ll_fila = 1 to ll_max_filas
for li_i = 1 to li_max_cols

ls_col = "#" + String(li_i) + ".name"
ls_col = dw_mantenimiento.Describe(ls_col)

// obtener el tipo de la columna
ls_tipo = dw_mantenimiento.Describe( ls_col + ".ColType")

ls_tipo = lower(mid(ls_tipo, 1, 5)) // para evitar tener que distinguir entre por ejemplo char(10), char(20)
choose case ls_tipo
CASE "long", "ulong", "decim", "numbe", "integ", "real"
dw_mantenimiento.setitem(ll_fila, ls_col, li_nulo)
CASE "date"
dw_mantenimiento.setitem(ll_fila, ls_col, ld_nulo)
case 'datet' // datetime
dw_mantenimiento.setitem(ll_fila, ls_col, ldt_nulo)
case 'time' // no creo que exista el caso
dw_mantenimiento.setitem(ll_fila, ls_col, lt_nulo)
case "char(", "strin"
dw_mantenimiento.setitem(ll_fila, ls_col, ls_nulo)
case else
Messagebox('Tipo por añadir al CASE en el código', 'añadir tipo: ' + ls_tipo + ', al itemerror de u_dw.')
return 1
END CHOOSE
next
next

//-------------------------------------

que los disfrutes,
Miguel L.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por Perez Gill (24 intervenciones) el 26/10/2009 15:36:25
Hola Miguell, mira no entendi el codigo, el tema es que quiero cambiar de color de fondo cualquier renglon de un DW por medio de un evento. Me podrias poner el codigo ?
Y la otra, son controles en un formulario no en un DW. Lo que queria hacer es algo asi:
En un form con 5 textbox:
FOR n=1 TO 5
textbox(tabOrder).text=space(0)
NEXT
o sea que en 3 lineas de codigo poner a 0 los controles por medio de su taborder o lo que sea. se entiende ?
muchas gracias miguell
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 26/10/2009 15:40:37
Hola Perez,

pues no entiendo muy bien entonces lo que quieres decir con "formulario" ...

si exportas los objetos implicados y me lo mandas por correo a mjlreina38 hotmai .com, te podré entender y ayudar mejor.

saludos,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 26/10/2009 15:51:25
¿estás seguro que estás con powerbuilder y no con Power ++ o datawindow .net o actionscript?

miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por Perez Gill (24 intervenciones) el 26/10/2009 19:42:42
bueno le llamo formulario a los objetos windows.
o sea que en un window, con 5 SingleLineEdit vaciarlos en 3 lineas de codigo.
oye y lo del color de fondo de un renglon del datawindows? lo tienes ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 27/10/2009 01:39:42
Vale entonces te entiendo mejor: Primero lo del color de fondo en dw:

Bueno, te lo contesté pero a ver si puedo ser más claro:
--------------------------------------------------------
tu dices:
--------
Mira suponiendo que en un DW tenemos los siguientes renglones con 3 columnas:
codigo apeynom deuda
3355 MONCASI PABLO 15.85
7788 PODESTA JULIO 25.89
4433 HERRERA MARIO 35.69
8877 DOMIJEAN JULIO 12.55

Lo que quiero es cambiar el fondo de color del renglon 1(3355 MONCASI PABLO) y 3(4433 HERRERA MARIO) , como si estuvieran seleccionados,

"o hay alguna forma de seleccionar asi en el DW ? "

en una de mis respuestas anteriores te dijé:
-------------------------------------------------------------
SÍ ... hay "alguna forma de seleccionar así en el dw"!:
si te vale el fondo azul por defecto de windows usas la función SelectRow( ):
( reemplaza dw_1 con el nombre de tu control de dw, o si lo codificas en un evento del control del dw en cuestión mismo: reemplaza dw_1 con 'this'´)
-----------------------------------------------------------------

// seleccionar la fila 1 y 3, momento en que también obtendrán un fondo azúl
dw_1.selectrow(1, true)
dw_1.selectrow(3, true)

// this.selectrow(1, true)
// this.selectrow(3, true)

// así de sencillo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 27/10/2009 01:46:02
Vale entonces te entiendo mejor: Primero lo del color de fondo en dw:

Bueno, te lo contesté pero a ver si puedo ser más claro:
--------------------------------------------------------
tu dices:
--------
Mira suponiendo que en un DW tenemos los siguientes renglones con 3 columnas:
codigo apeynom deuda
3355 MONCASI PABLO 15.85
7788 PODESTA JULIO 25.89
4433 HERRERA MARIO 35.69
8877 DOMIJEAN JULIO 12.55

Lo que quiero es cambiar el fondo de color del renglon 1(3355 MONCASI PABLO) y 3(4433 HERRERA MARIO) , como si estuvieran seleccionados,

"o hay alguna forma de seleccionar asi en el DW ? "

en una de mis respuestas anteriores te dijé:
-------------------------------------------------------------
SÍ ... hay "alguna forma de seleccionar así en el dw"!:
si te vale el fondo azul por defecto de windows usas la función SelectRow( ):
( reemplaza dw_1 con el nombre de tu control de dw, o si lo codificas en un evento del control del dw en cuestión mismo: reemplaza dw_1 con 'this'´)
-----------------------------------------------------------------

// seleccionar la fila 1 y 3, momento en que también obtendrán un fondo azúl
dw_1.selectrow(1, true)
dw_1.selectrow(3, true)

// this.selectrow(1, true)
// this.selectrow(3, true)

// así de sencillo

('para los 3 singleLineEdit en Window, siguiente respuesta)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiple Seleccion en un DW

Publicado por miguell (153 intervenciones) el 27/10/2009 02:13:01
(Ups, he duplicado el anterior correo porque pensé que se había colgado mi internet).

Ahora creo que entiendo lo que quieres hacer con
FOR n=1 TO 5
textbox(tabOrder).text=space(0)
NEXT

Si estás en una ventana, la ventana tiene un array con todos los controles:
control[]. Si lo que quieres hacer es poner todos los singlelineEdits a blanco sin saber por adelantado cuales son, la podrás usar.
Si son 3 sle's de los que sabes cuales son es más simple.

String ls_nulo

setnull(ls_nulo)

sle_uno.Text = ls_nulo
sle_dos.Text = ls_nulo

------------------------------------
aquí con un bucle entonces, por ejemplo desde un evento de la ventana
-------------------------------------
integer li_i
powerobject lpo
singleLineEdit lsle_temp
string ls_nulo

setnull( ls_nulo)

for li_i = 1 to upperbound( this.control )
lpo = this.control[li_i]
if typeof( lpo ) = singleLineEdit! then
lsle_temp = lpo
lsle_temp.Text = ls_nulo
end if
next

-------------------------------------------
lo mismo, pero desde un command button:
( si el botón está pegado directamente en la ventana , el padre del botón será la la ventana: usando "parent" ( con padre no me refiero a herencia aquí, sino al objeto dentro del cual existe otro objeto: un botón dentro de una ventana en este caso:)
-------------------------------------------------------
integer li_i
powerobject lpo
singleLineEdit lsle_temp
string ls_nulo

setnull( ls_nulo)

for li_i = 1 to upperbound( parent.control )
lpo = parent.control[li_i]
if typeof( lpo ) = singleLineEdit! then
lsle_temp = lpo
lsle_temp.Text = ls_nulo
end if
next
------------------------------------------------------
NOTA:
los objetos de usuario también tienen, igual que ventanas, el array nombrado "control", dentro del cual están todos los objetos contenidos por ese objeto de usuario.

en vez de usar "ls_nulo", también puedes usar
lsle_temp.Text = ''

depende de lo que quieras un nulo o una cadena vacía (que no es lo mismo, aunque al usuario le dará igual).

Bueno creo que ya hemos llegado a entendernos,
Suerte Perez Gill,
Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar