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

#11 Octavio Hernandez
21/06/2006 - 10:19 | Informe spam
Hola, Misael!

Te lo decía pensando intuitivamente en que

x as T == (x is T) ? (T) x : null

Al yo implementar la conversión "a mano", me ahorro la pregunta if (lista !=
null) que todavía te falta a tí...

De todos modos, lo correcto es mirar el IL generado, como ha hecho Calvin,
ahora analizo su respuesta

Saludos!

Octavio



"Misael Monterroca" escribió en el mensaje
news:%
Ps mira, leyendo la especificación de Visual Csharp:

19.1.1 The as operator
The as operator can be used with a type parameter T as the right hand side
only if T is known to be a reference type (§20.7). This restriction is
required because the value null might be returned as a result of the
operator.

class X
{
public T F<T>(object o) where T: Attribute {
return o as T; // Ok, T has a class
constraint
}

public T G<T>(object o) {
return o as T; // Error, unconstrained T
}
}



Entonces Internamente existe la comprobación de "x is eltipo", entonces,
lo único que estamos haciendo seria "ahorrarnos" esa comprobación, sin
embargo eso nos lleva a la comprobación del NULL, lo cual, se puede
resolver si zero18pub supiera EXACTAMENTE en donde está el control :D,
pero entonces, ya no necesitaria el "AS" ya que entonces podria hacer un
cast directo, jajajajajaja, que lio :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:
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
#12 Juan Diego Bueno
21/06/2006 - 13:20 | Informe spam
Cojonudo razonamiento, nos viene genial a la hora de recorrer todos los
controles de un mismo tipo en un form (por ejemplo, para
deshabilitarlos).

Hace no mucho yo quise hacer lo mismo, pero recorriendo unos
dataadapter que tenía en un form, y ahí la cosa cambia, ya que no los
considera controles. No encontré otra forma mejor que agruparlos en un
contenedor para poder manejarlos en forma de colección mediante
índices. Si alguien conoce otra forma, estaría bien que la
compartiera

Saludos

Octavio Hernandez wrote:
Hola, Misael!

Te lo decía pensando intuitivamente en que

x as T == (x is T) ? (T) x : null

Al yo implementar la conversión "a mano", me ahorro la pregunta if (lista !> null) que todavía te falta a tí...

De todos modos, lo correcto es mirar el IL generado, como ha hecho Calvin,
ahora analizo su respuesta

Saludos!

Octavio



"Misael Monterroca" escribió en el mensaje
news:%
> Ps mira, leyendo la especificación de Visual Csharp:
>
> 19.1.1 The as operator
> The as operator can be used with a type parameter T as the right hand side
> only if T is known to be a reference type (§20.7). This restriction is
> required because the value null might be returned as a result of the
> operator.
>
> class X
> {
> public T F<T>(object o) where T: Attribute {
> return o as T; // Ok, T has a class
> constraint
> }
>
> public T G<T>(object o) {
> return o as T; // Error, unconstrained T
> }
> }
>
>
>
> Entonces Internamente existe la comprobación de "x is eltipo", entonces,
> lo único que estamos haciendo seria "ahorrarnos" esa comprobación, sin
> embargo eso nos lleva a la comprobación del NULL, lo cual, se puede
> resolver si zero18pub supiera EXACTAMENTE en donde está el control :D,
> pero entonces, ya no necesitaria el "AS" ya que entonces podria hacer un
> cast directo, jajajajajaja, que lio :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:
>> 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
#13 Misael Monterroca
21/06/2006 - 18:10 | Informe spam
Estoy de acuerdo..

{
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:
Hola, Misael!

Te lo decía pensando intuitivamente en que

x as T == (x is T) ? (T) x : null

Al yo implementar la conversión "a mano", me ahorro la pregunta if (lista
!= null) que todavía te falta a tí...

De todos modos, lo correcto es mirar el IL generado, como ha hecho Calvin,
ahora analizo su respuesta

Saludos!

Octavio



"Misael Monterroca" escribió en el mensaje
news:%
Ps mira, leyendo la especificación de Visual Csharp:

19.1.1 The as operator
The as operator can be used with a type parameter T as the right hand
side only if T is known to be a reference type (§20.7). This restriction
is required because the value null might be returned as a result of the
operator.

class X
{
public T F<T>(object o) where T: Attribute {
return o as T; // Ok, T has a class
constraint
}

public T G<T>(object o) {
return o as T; // Error, unconstrained T
}
}



Entonces Internamente existe la comprobación de "x is eltipo", entonces,
lo único que estamos haciendo seria "ahorrarnos" esa comprobación, sin
embargo eso nos lleva a la comprobación del NULL, lo cual, se puede
resolver si zero18pub supiera EXACTAMENTE en donde está el control :D,
pero entonces, ya no necesitaria el "AS" ya que entonces podria hacer un
cast directo, jajajajajaja, que lio :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:
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
#14 Misael Monterroca
21/06/2006 - 18:13 | Informe spam
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
#15 Misael Monterroca
21/06/2006 - 18:19 | Informe spam
Lo menos costo es almacenar esa referencia a tus controles, en lugar de
estar buscandolos.

List<TuObjecto> listaDeObjetos = new List<TuObjeto>();

for(i = 0;i<10;i++)
listaDeObjetos.Add(new TuObjeto());
this.Controls.Add(listaDeObjetos[i]);
this.Controls.Add(new TextBox());
this.Controls.Add(new Label());

}

Ya despues, te evitas al tarea de andar buscando y comprobando que el
control sea de un determinado tipo ya que solamente tendrias que recorrer la
lista que anteriormente creaste.

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


"Juan Diego Bueno" wrote in message
news:
Cojonudo razonamiento, nos viene genial a la hora de recorrer todos los
controles de un mismo tipo en un form (por ejemplo, para
deshabilitarlos).

Hace no mucho yo quise hacer lo mismo, pero recorriendo unos
dataadapter que tenía en un form, y ahí la cosa cambia, ya que no los
considera controles. No encontré otra forma mejor que agruparlos en un
contenedor para poder manejarlos en forma de colección mediante
índices. Si alguien conoce otra forma, estaría bien que la
compartiera

Saludos

Octavio Hernandez wrote:
Hola, Misael!

Te lo decía pensando intuitivamente en que

x as T == (x is T) ? (T) x : null

Al yo implementar la conversión "a mano", me ahorro la pregunta if (lista
!> null) que todavía te falta a tí...

De todos modos, lo correcto es mirar el IL generado, como ha hecho Calvin,
ahora analizo su respuesta

Saludos!

Octavio



"Misael Monterroca" escribió en el mensaje
news:%
> Ps mira, leyendo la especificación de Visual Csharp:
>
> 19.1.1 The as operator
> The as operator can be used with a type parameter T as the right hand
> side
> only if T is known to be a reference type (§20.7). This restriction is
> required because the value null might be returned as a result of the
> operator.
>
> class X
> {
> public T F<T>(object o) where T: Attribute {
> return o as T; // Ok, T has a class
> constraint
> }
>
> public T G<T>(object o) {
> return o as T; // Error, unconstrained T
> }
> }
>
>
>
> Entonces Internamente existe la comprobación de "x is eltipo", entonces,
> lo único que estamos haciendo seria "ahorrarnos" esa comprobación, sin
> embargo eso nos lleva a la comprobación del NULL, lo cual, se puede
> resolver si zero18pub supiera EXACTAMENTE en donde está el control :D,
> pero entonces, ya no necesitaria el "AS" ya que entonces podria hacer un
> cast directo, jajajajajaja, que lio :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:
>> 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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida