Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:5.-listado-de-datos:8.-tree-view:start [2018/02/07 12:12] – editor externo 127.0.0.1wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:5.-listado-de-datos:8.-tree-view:start [2023/09/14 13:26] (actual) ary
Línea 2: Línea 2:
 ====== TREE-VIEW ===== ====== TREE-VIEW =====
 \\ \\
-Content Tree View.\\+**Content Tipo Tree View.**\\
 \\ \\
-**Ejemplos**:\\+En la visualización de los contents podemos lograr que se muestre en forma de árbol, para esto, debemos definir en la declaración del Content el atributo viewmode=“treeview”. Pero solo no basta con esto, tenemos que además en la colección del Content, definir un Content "HIJO" que contendrá los elementos asociados al registro "PADRE". Este Content HIJO tendrá un campo ID que se corresponde con el content "PADRE"
 +\\ 
 +\\ 
 +{{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:5.-listado-de-datos:8.-tree-view:treeviewvideo.mp4?nolink&600|}} 
 +\\ 
 +\\ 
 +**La definición se hace de la siguiente forma:** 
 +\\ 
 +\\ 
 +1.Declaramos el Content tipo "TREEVIEW" declarando en el prop el atributo viewmode="treeview"
 \\ \\
 <code xml> <code xml>
-<coll name="EspecialTreeview" title="XoneCollvacia" sql="" objname="" updateobj="" progid="" filter="" sort="" special="true" notab="true" group-swipe="true"> +    <frame name="c5" width="98%" height="1040p" framebox="true" border-corner-radius="10" lmargin="1%" >
-      <group name="HEADER" id="10" class="groupfixed_header"> +
-        <frame name="frmtitulo" class="frmsuperior"> +
-          <prop name="SALIR" type="B" class="btvolversuper" /> +
-          <prop name="MENU" type="TL" class="tlsuper" title="TREEVIEW" /> +
-          <prop name="MAP_COLORACTIVO" type="T" visible="0" /> +
-        </frame> +
-      </group> +
-      <group name="FOOTER" id="0" class="groupfixed_footer"> +
-        <prop name="MAP_GROUP" type="N" visible="0" /> +
-        <prop name="MAP_TOTAL_PAGES" type="N" visible="0" /> +
-        <frame name="FLOAT_FOOTER_FRAME" class="frmsuperior"> +
-          <prop name="MAP_LAST" type="B" img="last.png" title="Anterior" onclick="javascript:prev(self,'ir');" methodx="ExecuteNode(anterior)" forecolor="#FFFFFF" width="45%" height="80%" labelwidth="1" imgsel="last-sel.png" disablevisible="MAP_GROUP=1" /> +
-          <prop name="MAP_LAST_EMPTY" type="B" bgcolor="#00000000" width="45%" height="80%" labelwidth="1" newline="false" disablevisible="MAP_GROUP&gt;1" /> +
-          <prop name="MAP_NEXT" type="B" img="next.png" title="Siguiente " onclick="javascript:next(self,'ir');" methodx="ExecuteNode(siguiente)" forecolor="#FFFFFF" width="45%" height="80%" labelwidth="1" newline="false" lmargin="6%" imgsel="next-sel.png" disablevisible="MAP_GROUP=MAP_TOTAL_PAGES" /> +
-        </frame> +
-      </group> +
-      <group name="Group1" id="1"> +
-        <frame name="c5" width="98%" height="1040p" framebox="true" border-corner-radius="10" lmargin="1%" >+
           <prop name="CABECERA_LBL5" type="TL" class="classtl" title="Content en Arbol" />           <prop name="CABECERA_LBL5" type="TL" class="classtl" title="Content en Arbol" />
           <prop name="ContentPadre" visible="1" type="Z" viewmode="expanview" contents="ContentPadre" height="90%"></prop>           <prop name="ContentPadre" visible="1" type="Z" viewmode="expanview" contents="ContentPadre" height="90%"></prop>
           <contents name="ContentPadre" src="ContentPadre" autofocus="true" filter="IDPADRE IS NULL"></contents>           <contents name="ContentPadre" src="ContentPadre" autofocus="true" filter="IDPADRE IS NULL"></contents>
-        </frame>+    </frame> 
 +</code> 
 +\\ 
 +2. En la colección **Content Padre** tendremos ahora que declarar un **Content Hijo** que contendrá los "registros hijos" asociados al "registro padre" a través del IDPadre e IDHijo . 
 +\\ 
 +\\ 
 +<code xml> 
 +<coll name="ContentPadre" title="mapaDatos" edit-inrow="false" loadall="true" 
 +cell-odd-colorx="#FFFFFF" cell-even-colorx="#F2F2F2"  
 +sql="select t1.*,t1.ICON as MAP_ICON, 
 +'[' || (select count(ID) from gen_mapa_datos where IDPADRE = t1.ID) || ']' as MAP_COUNT 
 +from ##PREF##mapa_datos t1" objname="mapa_datos" 
 +updateobj="mapa_datos" progid="ASData.CASBasicDataObj">     
 +         
 +      <group name="General" id="1"> 
 +          <frame name="frmG" width="100%" bgcolor="#ffffff"> 
 +                <prop name="MAP_ICON" type="IMG" lmargin="20p" tmargin="20p" width="80p" height="80p" visible="4"  bmargin="20p" /> 
 +                <prop name="NOMBRE" type="T" textfont-bold="true" class="classgrid" align="left|center" width="490p" height="80p" newline="false" tmargin="20p" bmargin="20p" /> 
 +                <prop name="MAP_COUNT" type="T" text-forecolor="#666666" textfont-size="5" class="classgrid" align="left|center" width="110p" height="80p" newline="false" tmargin="20p" bmargin="20p" /> 
 +          </frame> 
 +       
 +        <prop name="ContentHijo" title="ContentHijo" type="Z" visible="1" contents="ContentHijo" /> 
 +        <contents name="ContentHijo" src="ContentHijo" filter="IDPADRE=##FLD_ID##" /> 
       </group>       </group>
-      <onback show-wait-dialog="false">+       
 +      <onexpand refresh="false">
         <action name="runscript">         <action name="runscript">
           <script language="javascript">           <script language="javascript">
-       appData.failWithMessage(-11888,"##EXIT##"); + ui.refreshContentRow("ContentPadre", self.getOwnerCollection().getObjectIndex(self)); 
-       </script>+ </script>
         </action>         </action>
-      </onback+      </onexpand> 
-      <before-edit refresh="true">+       
 +      <oncollapse refresh="false">
         <action name="runscript">         <action name="runscript">
-          <script language="javascript">  +          <script language="javascript"> 
- self.MAP_GROUP=1+ ui.refreshContentRow("ContentPadre", self.getOwnerCollection().getObjectIndex(self))
- self.MAP_TOTAL_PAGES=1;  + </script> 
- </script>+        </action> 
 +      </oncollapse> 
 +       
 +</coll> 
 + 
 +</code> 
 + 
 + 
 +<note tip>Nótese la declaración de los nodos **oncollapse** y **onexpand** en el Content Padre, estos nodos son los que permiten dar la funcionalidad al Content de abrir y cerrar el árbol de padre e hijos</note> 
 +\\ 
 +\\ 
 +3Definir la Colección **Content Hijo** donde se asocia el registro al padre correspondiente por ID. 
 +\\ 
 + 
 +<code xml> 
 +<coll name="ContentHijo" title="mapaDatos" loadall="true"  
 +sql="select t1.* from ##PREF##mapa_datos t1" objname="mapa_datos" updateobj="mapa_datos" progid="ASData.CASBasicDataObj"> 
 +      <group name="General" id="1">   
 +          <frame name="frmG" width="640p" lmargin="80p" bgcolor="#ffffff"
 +                <prop name="NOMBRE" textfont-bold="true" text-forecolor="#666666" type="T" class="classgrid" lmargin="20p" tmargin="20p" rmargin="20p" /> 
 +                <prop name="DIRECCION" height="90p" class="classgrid" type="T" lmargin="30p" bmargin="20p" text-forecolor="#666666" textfont-size="5" lines="2" fixed-lines="true" /> 
 +                <prop name="IDPADRE" type="N" visible="0" mapcol="ContentPadre" mapfld="ID" /> 
 +          </frame> 
 +      </group> 
 +      <load> 
 +        <action name="runscript"> 
 +          <script language="javascript"> 
 + self.MAP_ICON = "add.png"
 +  </script> 
 +        </action> 
 +      </load> 
 +      <selecteditem> 
 +        <action name="runscript"> 
 +          <script language="javascript"> 
 +   </script>
         </action>         </action>
-      </before-edit>+      </selecteditem>
     </coll>     </coll>
-  + 
- </code>+</code>