Вы находитесь на странице: 1из 14

IESTP “Andrés A.

Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Laboratorio Nº 02:

Uso del TreeView


Diseño de Interfaz grafica
dw_Data

dw_Lis_Grupo

dw_Lis_SubGrupo

cb_edt cb_imp cb_sali


cb_nvo cb_eli cb_dsh
cb_grb r

Construcción de la interfaz

Paso 1 Creamos una ventana para ello realizamos lo siguiente:


Clic en la
opción
New

Paso 2 De la nueva ventana que nos muestra ubicar el icono Window luego hacer click en OK

Semana 02 Página 1/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Clic aquí
para crear
la nueva
ventana

Paso 3 Nos muestra el diseño de la ventana a crear, seleccionamos la propiedad Title y


digitaremos Mantenimiento de Tablas, tal como aparece en la figura:

Paso 4
Grabaremos la ventana con el icono o eligiendo File y seguido de Save en el PowerMenu.

Semana 02 Página 2/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

3. Clic aquí
para
finalizar la
grabación
1. Digite aquí
el nombre de la
ventana
2. Agrege un
comentario de
ventana si lo
desea

En la misma ventana creamos el objeto Data Window e insertamos en la Ventana de


Mantenimiento de Tablas, para ello se selecciona del listado de objetos el icono luego haga
clic en la posición de la ventana donde desea poner el Data Window de la siguiente manera:

1. Seleccione aquí
para que se
despliegue la lista
de controles de
ventana

2. Con este icono


procedemos a crear
el DataWindow

Paso 5 Se van a incorporar a la ventana de acceso los siguientes objetos que se previeron en el
diseño:
Nombre del
Tipo de Control
Control
DataWindow dw_data
cb_nvo
cb_edt
cb_eli
CommandButton cb_grb
cb_dsh
cb_imp
cb_salir

Colocamos el titulo al Objeto en la propiedad Name que por defecto nos muestra un texto
estático dw_, para luego colocarle el nombre del data Window en este caso digitaremos Data,
luego en la propiedad Title digitaremos la palabra Datos, de esta manera:

Semana 02 Página 3/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

dw_data:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades dw_data
Name dw_data
Dataobject dw_mnt_tabarticulos
Title Art{iculos

En la ficha General de la hoja de propiedades Properties indique lo siguiente como en la


figura:

Ahora vamos a insertar botones dentro de la ventana, esto permitirá el mantenimiento de la


Tabla de Artículos para ello realizaremos lo siguiente:

Semana 02 Página 4/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

cb_nvo:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_nvo
Name cb_nvo
Text &Nuevo
Visible Con check
Enabled Con check

cb_edt:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_edt
Name cb_edt
Text &Editar
Visible Con check
Enabled Con check

cb_eli:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_eli
Name cb_eli
Text Eli&minar
Visible Con check
Enabled Con check

cb_grb:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_grb
Name cb_grb
Text &Grabar
Visible Con check
Enabled Sin check
cb_dsh:

Para incorporar éste control elija el control en la lista de controles de ventana

Semana 02 Página 5/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Propiedades de cb_dsh
Name cb_dsh
Text &Deshacer
Visible Con check
Enabled Sin check

cb_imp:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_imp
Name cb_imp
Text &Imprimir
Visible Con check
Enabled Con check

cb_salir:

Para incorporar éste control elija el control en la lista de controles de ventana

Propiedades de cb_salir
Name cb_dsh
Text &Salir
Visible Con check
Enabled Con check

dw_Lis_Grupo :
Propiedades dw_lis_Grupo
dataobject dw_Mnt_TabGrupos

dw_Lis_SubGrupo
Propiedades dw_lis_subgrupo
dataobject dw_mnt_TabSubgrupos

Confección de un plan de eventos

Plan de Eventos para w_mnt_Articulos


Objeto / Control Evento Actividades
Permite cargar de datos el TreeView para
w_mnt_articulo
Open mostrar Grupos en el primer nivel y Subgrupos
s
en el segundo nivel.
Permite filtrar la tabla de artículos de acuerdo al
tv_Lista SelectionChanged
grupo y subgrupo elegido..
Permite seleccionar toda una fila,
dw_data rowfocuschanged
sombreándola.
Permite ingresar una nueva fila en el data
cb_nvo Clicked
window (dw_data)

Semana 02 Página 6/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Permite editar fila(s) en el data window


cb_edt Clicked
(dw_data)
Permite eliminar una fila en el data window
cb_eli Clicked
(dw_data)
Permite actualizar cambios en el data window
cb_grb Clicked (dw_data) y hacerlos efectivos en la Base de
Datos
Permite deshacer los cambios que no se hayan
cb_dsh Clicked
grabados en el Data Window (dw_data)
Permite imprimir los datos del data window
cb_imp Clicked
(dw_data)
cb_salir Clicked Cerrar la ventana

Programación de los eventos(scripts)

Vamos a declarar dos variables compartidas de tipo String: ss_Grupo y ss_Sobgrupo que
guardarán el Grupo y el Subgrupo elegidos por el usuario.

Para la ventana w_mnt_articulos


w_mnt_articulos Open

// Grupos
dw_Lis_Grupo.SetTransObject(SQLCA)
dw_Lis_Grupo.Retrieve()

// Sub-Grupos
dw_Lis_SubGrupo.SetTransObject(SQLCA)
dw_Lis_SubGrupo.Retrieve()

// Artículos
dw_Data.SetTransObject(SQLCA)
dw_Data.Retrieve()

dw_Lis_Grupo.Visible = False
dw_Lis_SubGrupo.Visible = False

// Carga del TreeView


Long i, j
Long ll_Nodo1, ll_Nodo2, ll_Nodo

String ls_Valor, ls_Grupo, ls_SubGrupo


// Para guargar el primer Grupo y primer Subgrupo

String ls_Grupo1, ls_SubGrupo1

// Grupos
FOR i = 1 TO dw_Lis_Grupo.RowCount()
ls_Valor = dw_Lis_Grupo.GetItemString(i, "Grp_Codigo") + " " + &

Semana 02 Página 7/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

dw_Lis_Grupo.GetItemString(i, "Grp_Nombre")
ls_Grupo = LEFT(ls_Valor, 3)

ll_Nodo1 = tv_Lista.InsertItemLast(0, ls_Valor, 1)

// Captura el primer grupo


IF i = 1 THEN
ls_Grupo1 = ls_Grupo
END IF

// Sub-Grupos
dw_Lis_SubGrupo.SetFilter("Grp_Codigo = '" + ls_Grupo + "'")
dw_Lis_SubGrupo.Filter()
FOR j = 1 TO dw_Lis_SubGrupo.RowCount()
ls_Valor = dw_Lis_SubGrupo.GetItemString(j, 2) + " " + &
dw_Lis_SubGrupo.GetItemString(j, 3)

ls_SubGrupo = LEFT(ls_Valor, 3)

ll_Nodo2 = tv_Lista.InsertItemLast(ll_Nodo1, ls_Valor, 2)

// Captura el primer Subgrupo del primer Grupo


IF i = 1 And j = 1 THEN
ls_SubGrupo1 = ls_SubGrupo
// Captura el Nodo del primer Subgrupo
// del primer Grupo
ll_Nodo = ll_Nodo2
END IF
NEXT
NEXT

// Despliega todo el árbol


Long ll_tvi
ll_tvi = tv_Lista.FindItem(RootTreeItem! , 0)
tv_Lista.ExpandAll(ll_tvi)
FOR i = 1 TO dw_Lis_Grupo.RowCount() - 1
ll_tvi = tv_Lista.FindItem(NextTreeItem!, ll_tvi)
tv_Lista.ExpandAll(ll_tvi)
NEXT

// Ubicando al nodo que pertenece al primer Grupo y Subgrupo


tv_Lista.SelectITem(ll_Nodo)
tv_Lista.SetFocus()

// DataWindow dw_Data, filtrando los Artículos


// del primer Grupo y Primer SubGrupo
dw_Data.SetFilter("Grp_Codigo = '" + ls_Grupo1 + &
"' And Sgr_Codigo = '" + ls_SubGrupo1 + "'")
dw_Data.Filter()

Para el control tv_lista


tv_Lista SelectionChanged

Semana 02 Página 8/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

TreeViewItem l_tvi_Hijo, l_tvi_Padre


String ls_Titulo
Long ll_tvi

// Obtiene el elemento de treeview que está seleccionado ahora


tv_Lista.GetItem(newhandle, l_tvi_Hijo)

// Obteniendo el elemento Padre


ll_tvi = tv_Lista.FindItem(ParentTreeItem!, newhandle)
tv_Lista.GetItem(ll_tvi, l_tvi_Padre)

IF l_tvi_Hijo.Level = 2 THEN // Elemento de Nível 2


ss_Grupo = LEFT(l_tvi_Padre.Label, 3)
ss_SubGrupo = LEFT(l_tvi_Hijo.Label, 3)
//// DataWindow dw_Data
dw_Data.SetFilter("grp_Codigo = '" + ss_Grupo + &
"' And Sgr_Codigo = '" + ss_SubGrupo + "'")
dw_Data.Filter()
ls_Titulo = "[" + String(dw_Data.RowCount()) + &
" Artículos] Grupo: " + Mid(l_tvi_Padre.Label, 5) + &
" - " + "SubGrupo: " + Mid(l_tvi_Hijo.Label, 5)
dw_Data.Title = ls_Titulo
ELSE
ss_Grupo = LEFT(l_tvi_Hijo.Label, 3)
dw_Data.SetFilter("grp_Codigo = '" + ss_Grupo + "'")
dw_Data.Filter()
ls_Titulo = "[" + String(dw_Data.RowCount()) + &
" Artículos] Grupo: " + Mid(l_tvi_Hijo.Label, 5) + &
" - " + "SubGrupo: (No elegido)"
dw_Data.Title = ls_Titulo
dw_Data.SetFilter("grp_Codigo = '999'")
dw_Data.Filter()
END IF

Para el control dw_data:


dw_data rowfocuschanged
This.SelectRow(0, False)
This.SelectRow(This.Getrow(), True)

Compile y grabe los cambios

Para el control cb_nvo:


cb_nvo clicked
dw_data.Modify("Datawindow.ReadOnly=No")

Long ll_Fila
ll_Fila = dw_data.RowCount() + 1

dw_data.InsertRow(ll_Fila) // Inserta una nueva fila


dw_data.ScrollToRow(ll_Fila) // Ir a la nueva fila
dw_data.SetRow(ll_Fila) // Establece la nueva fila como fila actual

// Grabando el Grupo y Subgrupo actuales


dw_data.SetItem(ll_Fila, "Grp_Codigo", ss_Grupo)

Semana 02 Página 9/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

dw_data.setItem(ll_Fila, "Sgr_Codigo", ss_SubGrupo)

// Modificando la Interfáz
cb_Nvo.Enabled = False
cb_Edt.Enabled = False
cb_Eli.Enabled = False
cb_Grb.Enabled = True
cb_Dsh.Enabled = True
cb_Imp.Enabled = True
cb_Salir.Enabled = True

Parent.ControlMenu = False

Compile y grabe los cambios

Para el control cb_edt:


cb_edt clicked
dw_data.Modify("DataWindow.ReadOnly = No")

// Modificando la Interfáz
cb_Nvo.Enabled = False
cb_Edt.Enabled = False
cb_Eli.Enabled = False
cb_Grb.Enabled = True
cb_Dsh.Enabled = True
cb_Imp.Enabled = True
cb_Salir.Enabled = True

Parent.ControlMenu = False

Compile y grabe los cambios

Para el control cb_eli:


cb_eli clicked
Integer li_Rpta
Long ll_Fila

li_Rpta=Messagebox("Confirme", &
"Seguro qué desea eliminar la fila", &
Question!, YesNo!, 2)
IF li_Rpta = 1 THEN
ll_Fila = dw_Data.GetRow()
dw_Data.DeleteRow(ll_Fila)
dw_Data.UPDATE()
dw_Data.RETRIEVE()
ELSE
MessageBox("Atención", "Cancelado por el usuario")
END IF

Compile y grabe los cambios

Para el control cb_grb:


cb_grb clicked
IF dw_Data.Update() = 1 THEN

Semana 02 Página 10/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

dw_Data.Retrieve()
MessageBox("Atención", "Grabado con éxito")
ELSE
dw_Data.Undo() //DESHACER CAMBIOS
dw_Data.Retrieve()
MessageBox("ATENCION", "Falló la grabación" + &
". Se descartaron los cambios")
END IF
dw_Data.Modify("DataWindow.ReadOnly = Yes")

// Modificando la Interfáz
cb_nvo.Enabled = True
cb_edt.Enabled = True
cb_eli.Enabled = True
cb_grb.Enabled = False
cb_dsh.Enabled = False
cb_imp.Enabled = True
cb_salir.Enabled = True
Parent.ControlMenu = True

Compile y grabe los cambios

Para el control cb_dsh:


cb_dsh clicked
IF dw_data.CanUndo() THEN
dw_data.Undo()
dw_data.Retrieve()
ELSE
MessageBox("Atencion", "Nada que deshacer")
END IF

// Modificando la Interfáz
cb_nvo.Enabled = True
cb_edt.Enabled = True
cb_eli.Enabled = True
cb_grb.Enabled = False
cb_dsh.Enabled = False
cb_imp.Enabled = True
cb_salir.Enabled = True
Parent.ControlMenu = True
Compile y grabe los cambios

Para el control cb_imp:


cb_imp clicked
// Configurar impresora
PrintSetup()

// Imprimir el Datawindow
dw_data.print()
Compile y grabe los cambios
Para el control cb_salir:
cb_salir clicked
Close(Parent)

Semana 02 Página 11/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Compile y grabe los cambios

Invocar la ventana desde el Menú principal

Crear un menú llamado m_principal, con 2 opciones dentro de la opción Tablas que llamen a la
ventana de mantenimiento, como se muestra en la figura:

Ingresar el script
correspondiente al
evento clicked de
Tablas y opción
Art{iculos

Abrir la ventana
w_mntarticulos

Creación de los objetos DataWindows a usar

Para el ejemplo se creará el datawindow dw_mntTabArticulos, .el que tendrá el siguiente


diseño.

Ejecución

Para ejecutar la aplicación deberemos grabar usando el icono Save

Semana 02 Página 12/12 2010/09/15


IESTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder 11.5

Semana 02 Página 13/12 2010/09/15


ISTP “Andrés A. Cáceres Dorregaray”
Guía de Laboratorios PowerBuilder

Laboratorio 11 Página 11-1