none
Error al intentar seleccionar todos los elementos de un listbox al marcar un checkbox. RRS feed

  • Pregunta

  • Hola, comunidad, Tengo una consulta. Estoy intentando seleccionar todos los elementos de una lista cuando marco un checkbox, y al desmarcarlo ps que me deseleccione todos. Estuve investigando e intente realizarlo implementando este código:

    private void chkTodos_CheckedChanged(object sender, System.EventArgs e)
    		{    
             string msje;
    			try
    			{
    				if(chkTodos.Checked)
    				{
    					foreach( ListItem item in slbProductos.Items.Rows)
    					{
    						item.Selected = true;
    					}
    				}
    				else
    				{
    					foreach( ListItem item in slbProductos.Items.Rows)
    					{
    						item.Selected = false;
    					}
    				}
    			}
    			catch(Exception exc)
    			{
    			 msje = exc.ToString();
    			 lblPrueba.Text = msje;
    			}

    Pero me da un error de casteo que no se como solucionar. El error q imprime es el siguiente:

    Error1: "System.InvalidCastException: Specified cast is not valid. at Seniva.Fondos.Presentacion.Operacion.OperacionesPorFecha.chkTodos_CheckedChanged(Object sender, EventArgs e) in c:\webs\pmd\suitemdc\fondos\fondospresentacion\operacion\operacionesporfecha.aspx.cs:line 1427...

    Anteriormente implemente este código. en ves del .Rows, solo lo deje en .Items:

    private void chkTodos_CheckedChanged(object sender, System.EventArgs e)
    		{    
             string msje;
    			try
    			{
    				if(chkTodos.Checked)
    				{
    					foreach( ListItem item in slbProductos.Items)
    					{
    						item.Selected = true;
    					}
    				}
    				else
    				{
    					foreach( ListItem item in slbProductos.Items)
    					{
    						item.Selected = false;
    					}
    				}
    			}
    			catch(Exception exc)
    			{
    			 msje = exc.ToString();
    			 lblPrueba.Text = msje;
    			}

    Pero al momento de compilarlo en el Visual Studio me arrojo este error y es por eso que tuve que cambiarlo por el anterior.

    Error2: "foreach statement cannot operate on variables of type 'system.data.datatable' because 'system.data.datatable' does not contain a definition for 'getenumerator', or it is inaccessible".

    Cabe indicar que cuando le puse .Rows compilo todo bien en el Ide de VS. Pero cuando fui a verificar al aplicativo en la web al clickar en el checkbox me imprimió el error1 en el label.

    Cómo puedo solucionar esto, porque se que la lógica en si del código esta bien pero no logro solucionarlo. Como datos adicionales mi listbox(el cual cargo sus elementos por medio de un data table) tiene el nombre de slbProductos y creo que es en este control donde surge el error.

    Agradezco cualquier ayuda o aporte de antemano.

    viernes, 22 de enero de 2021 8:23

Respuestas

  • Hola

    el error dice que en los componentes no se puede hacer un foreach

    deves usar 

    try

    {

    for(int i =0; i < slbProductos.Items.Length;i++)

    {

    slbProductos.item[i].Selected = chkTodos.Checked;

    }

    }catch()

    {}

    algo asi

    de esa forma eliminas la comparacion

    so chkTodos es true combierte a todos en true y vsi no los hace false


    • Editado Marti Llam viernes, 22 de enero de 2021 12:44
    • Marcado como respuesta EricRRModerator martes, 26 de enero de 2021 14:12
    viernes, 22 de enero de 2021 12:43

Todas las respuestas

  • [...] Error2: "foreach statement cannot operate on variables of type 'system.data.datatable' because 'system.data.datatable' does not contain a definition for 'getenumerator', or it is inaccessible".[...]

    Como datos adicionales mi listbox(el cual cargo sus elementos por medio de un data table) tiene el nombre de slbProductos [...]

    Creo que aquí hay un error. Según lo que dice el mensaje de error, el dato que estás intentando recorrer es el propio datatable, y no el listbox. Revisa si slbProductos es realmente el nombre del listbox, porque según el mensaje de error no es así.

    viernes, 22 de enero de 2021 12:34
  • Hola

    el error dice que en los componentes no se puede hacer un foreach

    deves usar 

    try

    {

    for(int i =0; i < slbProductos.Items.Length;i++)

    {

    slbProductos.item[i].Selected = chkTodos.Checked;

    }

    }catch()

    {}

    algo asi

    de esa forma eliminas la comparacion

    so chkTodos es true combierte a todos en true y vsi no los hace false


    • Editado Marti Llam viernes, 22 de enero de 2021 12:44
    • Marcado como respuesta EricRRModerator martes, 26 de enero de 2021 14:12
    viernes, 22 de enero de 2021 12:43
  • Hola Abel,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    viernes, 22 de enero de 2021 15:20
    Moderador
  •  Marti gracias por tu sugerencia, intente hacerlo como dices pero en el for no me permite poner slbProductos.Items.Length, solo hasta slbProductos.Items... despues no me aparece la opcion de length

    y abajo tampoco me permite el slbProductos.item[i].Selected de hecho no me permite poner el [] despues del item ya que me bota error

    porque me dice que deberia ir ().


    • Editado Abel_3021 viernes, 22 de enero de 2021 20:14
    viernes, 22 de enero de 2021 20:06
  • [...] Error2: "foreach statement cannot operate on variables of type 'system.data.datatable' because 'system.data.datatable' does not contain a definition for 'getenumerator', or it is inaccessible".[...]

    Como datos adicionales mi listbox(el cual cargo sus elementos por medio de un data table) tiene el nombre de slbProductos [...]

    Creo que aquí hay un error. Según lo que dice el mensaje de error, el dato que estás intentando recorrer es el propio datatable, y no el listbox. Revisa si slbProductos es realmente el nombre del listbox, porque según el mensaje de error no es así.

    Lo que pasa es que es un listbox pero parece que modificado o customizado no es el típico listbox. Yo solo trabajo encima de lo q ya esta implementado. Ese Listbox sus elementos(son cargados desde un datatable fuente de datos) se eligen cada uno a través de un check seria como un CheckBoxList, aparte tmb viendolo bien me he dado cuenta que se despliega dentro de un DropDownList, y eso quizás es el xq de el error. Mandaría una imagen pero aun no me dejan porque recien reactive mi cuenta.
    sábado, 23 de enero de 2021 15:13