Introducir xml con atributos en un datagrid

10 views
Skip to first unread message

<mx:Eduardo/>

unread,
Apr 9, 2009, 11:25:18 AM4/9/09
to Flex AIR Venezuela
Tengo un archivo xml con algun atributo(en el caso siguiente el
atributo "color").

<ciudad>
<casas>
<casa color=amarillo>Juan</casa>
<casa color=amarillo>Gabriel</casa>
<casa color=azul>Pedro</casa>
<casa color=rojo>Maria</casa>
</casas>
</ciudad>

Luego coloco un datagrid con una columna, headerText="dueños de
casas"(por ejemplo) , dataField="casa"; evidentemente me va a mostrar
todas las casas, osea: juan, gabriel, pedro y maria.

Entonces la pregunta es como hago luego para que solo me muestre los
"dueños de las casas" con el atributo "amarillo", osea solo muestre a
juan y a gabriel?????

Espero haber sido explicito, en caso de que no, avisenme para tratar
de explicar mejor. Saludos a todos y espero puedan ayudarme.

Juan Manrique

unread,
Apr 9, 2009, 1:39:46 PM4/9/09
to Flex AIR Venezuela
Hola Eduardo.
Por lo que entiendo de tu mensaje, necesitas filtrar los datos que
muestras en el datagrid según un criterio cualquiera; en tu ejemplo,
el color. Creo que lo que necesitas usar el un Filter Function. Los
filter function son funciones muy simples que ejecutan una tarea de
filtrado definida por el programador y que se agregan como propiedad a
algunos tipos de datos basados en listas, de los que usamos muy
comunmente, por ejemplo, los ArrayCollection y los XMLListCollection.
Estas funciones tienen la forma:

<private|public> function <nombre de la funcion> (item:Object):Boolean
{
return <resultado de la condicion de filtrado(true o false)>
}

Donde <resultado de la condicion de filtrado(true o false)> es
cualquier condición de filtrado que desees aplicarle a cada uno de los
items de tu colección, cosa que automáticamente es verificada por Flex
para cada item y que al verificarla retorne cierto o falso, según el
caso. Esto producirá una especie de "colección temporal" en tu
datagrid solo con los items que devolvieron true en el filter
function. Este filtrado se llevará a cabo en cualquier evento que
desees, donde solo tendras que invocar el metodo ".refresh()" de la
colección a la que le asignaste el filter function. Este proceso no
modificará la colección original, lo que te permitirá hacer un nuevo
filtrado variando los parametros de filtrado en otra oportunidad
posteriormente.

Aunque lo anterior no te haya quedado muy claro, trabajar con filter
function es muy simple. Aqui te dejo un enlace a un ejemplo bastante
interesante. En este caso usan algo de expresiones regulares, pero en
un filter function la condición de filtrado, como ya dije, la
estableces tu. Cualquier cosa que no entiendas en el ejemplo, pregunta
por aqui nuevamente que con mucho gusto te aclararemos las dudas:

http://blog.flexexamples.com/2007/08/04/filtering-an-xmllistcollection-using-the-filterfunction-property-and-regular-expressions/

Espero que te sirva de algo lo anterior.

Juan Manrique.

<mx:Eduardo/>

unread,
Apr 17, 2009, 11:23:26 AM4/17/09
to Flex AIR Venezuela
gracias Juan me has ayudado a resolver mi problema!

quiero aclara algo que me tenia confundido:

<casas>
<casa color=amarillo>Juan</casa>
</casas>

es igual que:

<casas>
<casa>Juan</casa>
<color>amarillo</color>
</casas>
> http://blog.flexexamples.com/2007/08/04/filtering-an-xmllistcollectio...

Juan Manrique

unread,
Apr 18, 2009, 9:48:31 PM4/18/09
to Flex AIR Venezuela
Hola Eduardo.

Desde el punto de vista conceptual no son iguales los 2 ejemplos de
xml en el mensaje anterior aunque es posible que muchos "parsers" o
analizadores xml tengan la capacidad de tratarlos como iguales. Si te
fijas en tu primer xml, el primer tag (padre) tiene hijos tipo casa
que tienen 2 propiedades: el nombre y el color. Si ahora ves el
segundo de tus xml, el primer tag tiene 2 hijos, <casa> y <color>, y
esto no es lo que quiere decir el primer xml, por eso es que digo que
conceptualmente no son iguales. Mi opinión sobre cómo serían
exactamente iguales sería esta:

<casas>
<casa etc=Juan>
<color>amarillo</color>
</casa>
</casas>

Como dije antes, es muy probable que algunos parsers puedan manejar
ambos casos como si fuesen iguales, pero estoy casi seguro que los
parsers más conocidos en Java, Dom y Sax, no los tratarían como
iguales pues son muy exactos en diferenciar propiedades e hijos. Lo
anterior fue a modo de comentario.

Saludos.

Juan Manrique,
> > > de explicar mejor. Saludos a todos y espero puedan ayudarme.- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
Reply all
Reply to author
Forward
0 new messages