foreach para una table

20/06/2006 - 13:47 por zero18pub | Informe spam
Tengo una table html q converti en control del servidor al que tiene 20
filas y 40 celdas.
He añadido un radiobuttonlist a las 20 celdas de izquierda.

Voy a recorrer la tabla para encontrar los radiobuttonlist

public int recorre(Control parent)
{

foreach (Control ctrl in parent.Controls) {
if (ctrl.Controls.Count > 0)
{

b += 1;
recorre(ctrl);
}

} return b;
}
Solo recorro los htmltableCell no encuentro los radiobuttonlist. que
hacer

Preguntas similare

Leer las respuestas

#16 Vyacheslav Popov
21/06/2006 - 18:56 | Informe spam
Esto es cuestión de simplicidad frente a velocidad y C# frente a MSIL.

¿Por que no programar en ensamblador directamente?

Saludos ;)


"Misael Monterroca" escribió en el mensaje
news:%
Exacto, y finalmente es menos costoso realizar la comprobación de NULL,
que la comprobación de un tipo.

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Daniel A. Calvin" wrote in message
news:
Hola Octavio

Mira el codigo msil de un a y otra opción.

Sorpresaaaa el operador as es mas barato que el is

Tu código:
if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...








El Msil, mas o menos de tu codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: brfalse.s IL_xxzz
IL_xxxe: ldloc.0
IL_xxxf: castclass RadioButtonList // Esto, al hacer el cast hace
comprobación de tipo.

Este metodo hace que el framework chequee dos veces el tipo una por el is
y otra por el cast.

El código de Misael
RadioButtonList lista = ctrl as RadioButtonList;
if(lista != null)





El Msil, mas o menos de su codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: stloc.1
IL_xxxd: ldloc.1
IL_xxxe: brfalse.s IL_xxzz
IL_xx10: ldloc.1
IL_xx11: callvirt instance lo que sea RadioButtonList::Loquesea //
Invoca sin volver a chequear tipo

Esto lo pueden ver facilmente si escriben el ejemplito y luego miran el
codigo MSIL generado.

Saludos

Daniel Calvin
MCP


"Octavio Hernandez" escribió en el
mensaje news:
Hola Misael,

¡De acuerdo!
Aunque en cuanto a rendimiento creo que mi solución es un pelín mejor...

Salu2 - Octavio


"Misael Monterroca" escribió en el mensaje
news:
We, y por que no usar las bondades el lenguaje :D

RadioButtonList lista = ctrl as RadioButtonList;

if(lista != null)
{
//Lo que se tenga que hacer
}

Aqui de metiche :D
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Octavio Hernandez" wrote in message
news:

Primero debes preguntar si el control es del tipo adecuado:

if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...

Slds - Octavio


escribió en el mensaje
news:
Me contesto:

Se declara una varaible del tipo radio buttonlist "radio."

y se le asigna al crtl precedido de un cast

radio = (radiobuttonlist) ctrl



wrote:
EL ERROR se soluciona con if ctrl.Controls >=0
ahora bien como tratar a los ctrl del tipo radiobuttom para
programrlos?
Vyacheslav Popov wrote:
> Intenta buscar tu control dentro de la celda.
>
> Saludos.
>
> escribió en el mensaje
> news:
> Tengo una table html q converti en control del servidor al que
> tiene 20
> filas y 40 celdas.
> He añadido un radiobuttonlist a las 20 celdas de izquierda.
>
> Voy a recorrer la tabla para encontrar los radiobuttonlist
>
> public int recorre(Control parent)
> {
>
> foreach (Control ctrl in parent.Controls) {
> if (ctrl.Controls.Count > 0)
> {
>
> b += 1;
> recorre(ctrl);
> }
>
> } return b;
> }
> Solo recorro los htmltableCell no encuentro los radiobuttonlist.
> que
> hacer




















Respuesta Responder a este mensaje
#17 Misael Monterroca
21/06/2006 - 19:09 | Informe spam
jajajajajajajaja..

Aunque en este caso, aplicaria como:

¿Por qué no programar directamente en IL? :P

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Vyacheslav Popov" wrote in message
news:
Esto es cuestión de simplicidad frente a velocidad y C# frente a MSIL.

¿Por que no programar en ensamblador directamente?

Saludos ;)


"Misael Monterroca" escribió en el mensaje
news:%
Exacto, y finalmente es menos costoso realizar la comprobación de NULL,
que la comprobación de un tipo.

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Daniel A. Calvin" wrote in message
news:
Hola Octavio

Mira el codigo msil de un a y otra opción.

Sorpresaaaa el operador as es mas barato que el is

Tu código:
if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...








El Msil, mas o menos de tu codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: brfalse.s IL_xxzz
IL_xxxe: ldloc.0
IL_xxxf: castclass RadioButtonList // Esto, al hacer el cast hace
comprobación de tipo.

Este metodo hace que el framework chequee dos veces el tipo una por el
is y otra por el cast.

El código de Misael
RadioButtonList lista = ctrl as RadioButtonList;
if(lista != null)





El Msil, mas o menos de su codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: stloc.1
IL_xxxd: ldloc.1
IL_xxxe: brfalse.s IL_xxzz
IL_xx10: ldloc.1
IL_xx11: callvirt instance lo que sea RadioButtonList::Loquesea //
Invoca sin volver a chequear tipo

Esto lo pueden ver facilmente si escriben el ejemplito y luego miran el
codigo MSIL generado.

Saludos

Daniel Calvin
MCP


"Octavio Hernandez" escribió en el
mensaje news:
Hola Misael,

¡De acuerdo!
Aunque en cuanto a rendimiento creo que mi solución es un pelín
mejor...

Salu2 - Octavio


"Misael Monterroca" escribió en el mensaje
news:
We, y por que no usar las bondades el lenguaje :D

RadioButtonList lista = ctrl as RadioButtonList;

if(lista != null)
{
//Lo que se tenga que hacer
}

Aqui de metiche :D
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Octavio Hernandez" wrote in message
news:

Primero debes preguntar si el control es del tipo adecuado:

if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...

Slds - Octavio


escribió en el mensaje
news:
Me contesto:

Se declara una varaible del tipo radio buttonlist "radio."

y se le asigna al crtl precedido de un cast

radio = (radiobuttonlist) ctrl



wrote:
EL ERROR se soluciona con if ctrl.Controls >=0
ahora bien como tratar a los ctrl del tipo radiobuttom para
programrlos?
Vyacheslav Popov wrote:
> Intenta buscar tu control dentro de la celda.
>
> Saludos.
>
> escribió en el mensaje
> news:
> Tengo una table html q converti en control del servidor al que
> tiene 20
> filas y 40 celdas.
> He añadido un radiobuttonlist a las 20 celdas de izquierda.
>
> Voy a recorrer la tabla para encontrar los radiobuttonlist
>
> public int recorre(Control parent)
> {
>
> foreach (Control ctrl in parent.Controls) {
> if (ctrl.Controls.Count > 0)
> {
>
> b += 1;
> recorre(ctrl);
> }
>
> } return b;
> }
> Solo recorro los htmltableCell no encuentro los radiobuttonlist.
> que
> hacer
























Respuesta Responder a este mensaje
#18 Vyacheslav Popov
21/06/2006 - 19:59 | Informe spam
Sí, tientes razón, pero en ensamblador es más rápido :D

¿Cómo ganar 2 ciclos de microprocesador?

jejejeje

"Misael Monterroca" escribió en el mensaje
news:
jajajajajajajaja..

Aunque en este caso, aplicaria como:

¿Por qué no programar directamente en IL? :P

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Vyacheslav Popov" wrote in message
news:
Esto es cuestión de simplicidad frente a velocidad y C# frente a MSIL.

¿Por que no programar en ensamblador directamente?

Saludos ;)


"Misael Monterroca" escribió en el mensaje
news:%
Exacto, y finalmente es menos costoso realizar la comprobación de NULL,
que la comprobación de un tipo.

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Daniel A. Calvin" wrote in message
news:
Hola Octavio

Mira el codigo msil de un a y otra opción.

Sorpresaaaa el operador as es mas barato que el is

Tu código:
if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...








El Msil, mas o menos de tu codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: brfalse.s IL_xxzz
IL_xxxe: ldloc.0
IL_xxxf: castclass RadioButtonList // Esto, al hacer el cast hace
comprobación de tipo.

Este metodo hace que el framework chequee dos veces el tipo una por el
is y otra por el cast.

El código de Misael
RadioButtonList lista = ctrl as RadioButtonList;
if(lista != null)





El Msil, mas o menos de su codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: stloc.1
IL_xxxd: ldloc.1
IL_xxxe: brfalse.s IL_xxzz
IL_xx10: ldloc.1
IL_xx11: callvirt instance lo que sea RadioButtonList::Loquesea //
Invoca sin volver a chequear tipo

Esto lo pueden ver facilmente si escriben el ejemplito y luego miran el
codigo MSIL generado.

Saludos

Daniel Calvin
MCP


"Octavio Hernandez" escribió en el
mensaje news:
Hola Misael,

¡De acuerdo!
Aunque en cuanto a rendimiento creo que mi solución es un pelín
mejor...

Salu2 - Octavio


"Misael Monterroca" escribió en el mensaje
news:
We, y por que no usar las bondades el lenguaje :D

RadioButtonList lista = ctrl as RadioButtonList;

if(lista != null)
{
//Lo que se tenga que hacer
}

Aqui de metiche :D
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Octavio Hernandez" wrote in message
news:

Primero debes preguntar si el control es del tipo adecuado:

if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...

Slds - Octavio


escribió en el mensaje
news:
Me contesto:

Se declara una varaible del tipo radio buttonlist "radio."

y se le asigna al crtl precedido de un cast

radio = (radiobuttonlist) ctrl



wrote:
EL ERROR se soluciona con if ctrl.Controls >=0
ahora bien como tratar a los ctrl del tipo radiobuttom para
programrlos?
Vyacheslav Popov wrote:
> Intenta buscar tu control dentro de la celda.
>
> Saludos.
>
> escribió en el mensaje
> news:
> Tengo una table html q converti en control del servidor al que
> tiene 20
> filas y 40 celdas.
> He añadido un radiobuttonlist a las 20 celdas de izquierda.
>
> Voy a recorrer la tabla para encontrar los radiobuttonlist
>
> public int recorre(Control parent)
> {
>
> foreach (Control ctrl in parent.Controls) {
> if (ctrl.Controls.Count > 0)
> {
>
> b += 1;
> recorre(ctrl);
> }
>
> } return b;
> }
> Solo recorro los htmltableCell no encuentro los radiobuttonlist.
> que
> hacer




























Respuesta Responder a este mensaje
#19 Daniel A. Calvin
22/06/2006 - 02:52 | Informe spam
Hola Vyacheslav Popov

Lo mande solo por que muchas veces algunas cosas son distintas a como uno
imagina.
El codigo Msil se lo robe a Tom Archer...

Un abrazo

Daniel


"Vyacheslav Popov" escribió en el
mensaje news:Op6i$
Sí, tientes razón, pero en ensamblador es más rápido :D

¿Cómo ganar 2 ciclos de microprocesador?

jejejeje

"Misael Monterroca" escribió en el mensaje
news:
jajajajajajajaja..

Aunque en este caso, aplicaria como:

¿Por qué no programar directamente en IL? :P

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Vyacheslav Popov" wrote in message
news:
Esto es cuestión de simplicidad frente a velocidad y C# frente a MSIL.

¿Por que no programar en ensamblador directamente?

Saludos ;)


"Misael Monterroca" escribió en el mensaje
news:%
Exacto, y finalmente es menos costoso realizar la comprobación de NULL,
que la comprobación de un tipo.

{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Daniel A. Calvin" wrote in message
news:
Hola Octavio

Mira el codigo msil de un a y otra opción.

Sorpresaaaa el operador as es mas barato que el is

Tu código:
if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...








El Msil, mas o menos de tu codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: brfalse.s IL_xxzz
IL_xxxe: ldloc.0
IL_xxxf: castclass RadioButtonList // Esto, al hacer el cast hace
comprobación de tipo.

Este metodo hace que el framework chequee dos veces el tipo una por el
is y otra por el cast.

El código de Misael
RadioButtonList lista = ctrl as RadioButtonList;
if(lista != null)





El Msil, mas o menos de su codigo:
IL_xxx7: isinst RadioButtonList
IL_xxxc: stloc.1
IL_xxxd: ldloc.1
IL_xxxe: brfalse.s IL_xxzz
IL_xx10: ldloc.1
IL_xx11: callvirt instance lo que sea RadioButtonList::Loquesea //
Invoca sin volver a chequear tipo

Esto lo pueden ver facilmente si escriben el ejemplito y luego miran
el codigo MSIL generado.

Saludos

Daniel Calvin
MCP


"Octavio Hernandez" escribió en el
mensaje news:
Hola Misael,

¡De acuerdo!
Aunque en cuanto a rendimiento creo que mi solución es un pelín
mejor...

Salu2 - Octavio


"Misael Monterroca" escribió en el mensaje
news:
We, y por que no usar las bondades el lenguaje :D

RadioButtonList lista = ctrl as RadioButtonList;

if(lista != null)
{
//Lo que se tenga que hacer
}

Aqui de metiche :D
{
this.Saludo = Saludos!
this.Nombre = Misael Monterroca | Microsoft MVP C#;
this.Blog = http://www.neo-mx.com/blogs/neo-mx
}


"Octavio Hernandez" wrote in message
news:

Primero debes preguntar si el control es del tipo adecuado:

if (ctrl is RadioButtonList)
{
RadioButtonList lista = (RadioButtonList) ctrl;
// ...

Slds - Octavio


escribió en el mensaje
news:
Me contesto:

Se declara una varaible del tipo radio buttonlist "radio."

y se le asigna al crtl precedido de un cast

radio = (radiobuttonlist) ctrl



wrote:
EL ERROR se soluciona con if ctrl.Controls >=0
ahora bien como tratar a los ctrl del tipo radiobuttom para
programrlos?
Vyacheslav Popov wrote:
> Intenta buscar tu control dentro de la celda.
>
> Saludos.
>
> escribió en el mensaje
> news:
> Tengo una table html q converti en control del servidor al que
> tiene 20
> filas y 40 celdas.
> He añadido un radiobuttonlist a las 20 celdas de izquierda.
>
> Voy a recorrer la tabla para encontrar los radiobuttonlist
>
> public int recorre(Control parent)
> {
>
> foreach (Control ctrl in parent.Controls) {
> if (ctrl.Controls.Count > 0)
> {
>
> b += 1;
> recorre(ctrl);
> }
>
> } return b;
> }
> Solo recorro los htmltableCell no encuentro los radiobuttonlist.
> que
> hacer
































Respuesta Responder a este mensaje
#20 Octavio Hernandez
22/06/2006 - 11:08 | Informe spam
Hola Daniel, Misael, Vyacheslav!

Perdonad la demora en responder, ayer he tenido un día "movido"...
Además he hecho unas cuantas pruebas por mi cuenta :-)

Vyacheslav: >> ¿Cómo ganar 2 ciclos de microprocesador?

Bueno, en el fondo tienes razón... El "culpable" de este hilo soy yo que fue
quien mencionó primero
el tema del rendimiento. Pero me alegro de haberlo hecho, porque he
aprendido algo...

Daniel: > Lo mandé solo por que muchas veces algunas cosas son distintas a
como uno imagina.

Exacto! Gracias por "darnos la luz".

Misael: >>>>> Exacto, y finalmente es menos costoso realizar la comprobación
de NULL,
que la comprobación de un tipo.











Creo que me he dado cuenta de dónde estaba el fallo en mi razonamiento:
asumir que un cast

(RadioButtonList) control

es una mera re-interpretación del significado de 4 bytes de memoria, como
ocurre en código no
manejado (C++, Delphi). En código manejado no se permite este tipo de
"agujeros potenciales",
y por eso los compiladores (VB también) producen una instrucción castclass
en el IL.

Saludos a todos,

Octavio
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida