none
Cargar GridView al Seleccionar CheckedListBox C# RRS feed

  • Pregunta

  • Hola, Al seleccionar Dos Check en el grid debe aparecer 2 registros , y no logro hacer eso Solo aparecen 1 registro..

    Como Puedo resolver eso,por favor

    Consulta del procedimiento almacenado

    ALTER PROCEDURE [dbo].[ListaOpcionesModulos]
    (
    @IdModulo int =null
    )

    as
    begin
    select * from [OpcionesModulos] where IdModulo in(@IdModulo)
    end

    Codigo Formulario                              

    private void llenarGridOpcionesModulos()
            {
                try
                {
                    for(int intY=0;intY<radCheckedListBoxModulo.CheckedItems.Count;intY++)
                    {

                        radGridViewAccesos.DataSource = NOpcionesModulos.ListaOpcionesModulos(int.Parse(radCheckedListBoxModulo.CheckedItems[intY].Value.ToString()));

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Registro No Encontrado" + ex.ToString());
                }
            }

     private void radCheckedListBoxModulo_ItemCheckedChanged(object sender, Telerik.WinControls.UI.ListViewItemEventArgs e)
            {
                llenarGridOpcionesModulos();
            }



    • Editado Gabriela345 viernes, 5 de agosto de 2016 15:43
    viernes, 5 de agosto de 2016 15:19

Respuestas

  • hola

    es que debes ir acumulando las respeustas antes de asignar el datasource

    private void llenarGridOpcionesModulos()
    {
    	try
    	{
    		List<..> list = new List<..>();
    		
    		for(int intY=0;intY<radCheckedListBoxModulo.CheckedItems.Count;intY++)
    		{
    
    			int selection = int.Parse(radCheckedListBoxModulo.CheckedItems[intY].Value.ToString());
    			
    			list.Add(NOpcionesModulos.ListaOpcionesModulos(selection));
    
    		}
    		
    		radGridViewAccesos.DataSource = list;
    		
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show("Registro No Encontrado" + ex.ToString());
    	}
    }

    uso List<..> list = new List<..>(); porque no se que tipo devuelve ListaOpcionesModulos() pero define en los .. la clase correcta

    al final cuando termina de iterar asignas el datasource del grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriela345 viernes, 5 de agosto de 2016 17:41
    viernes, 5 de agosto de 2016 16:33
  • si devuelves un datatable entonces deebrias usar el merge para ir acumulando

    private void llenarGridOpcionesModulos()
    {
    	try
    	{
    		DataTable temp = new DataTable();
    		//aqui tienes que crearle la estructura de campos
    		
    		for(int intY=0;intY<radCheckedListBoxModulo.CheckedItems.Count;intY++)
    		{
    
    			int selection = int.Parse(radCheckedListBoxModulo.CheckedItems[intY].Value.ToString());
    			
    			temp.Merge(NOpcionesModulos.ListaOpcionesModulos(selection));
    
    		}
    		
    		radGridViewAccesos.DataSource = temp;
    		
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show("Registro No Encontrado" + ex.ToString());
    	}
    }

    lo que recomendaria es que dejes de usar datatable y uses clase tipadas, como explico aqui

    [WinForms] Edición Empleados

    crea una clase de datos que devuelva List<> de una clase que defines y no datatable

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriela345 viernes, 5 de agosto de 2016 17:40
    viernes, 5 de agosto de 2016 17:13

Todas las respuestas

  • Alguien q me respondan
    viernes, 5 de agosto de 2016 16:20
  • hola

    es que debes ir acumulando las respeustas antes de asignar el datasource

    private void llenarGridOpcionesModulos()
    {
    	try
    	{
    		List<..> list = new List<..>();
    		
    		for(int intY=0;intY<radCheckedListBoxModulo.CheckedItems.Count;intY++)
    		{
    
    			int selection = int.Parse(radCheckedListBoxModulo.CheckedItems[intY].Value.ToString());
    			
    			list.Add(NOpcionesModulos.ListaOpcionesModulos(selection));
    
    		}
    		
    		radGridViewAccesos.DataSource = list;
    		
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show("Registro No Encontrado" + ex.ToString());
    	}
    }

    uso List<..> list = new List<..>(); porque no se que tipo devuelve ListaOpcionesModulos() pero define en los .. la clase correcta

    al final cuando termina de iterar asignas el datasource del grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriela345 viernes, 5 de agosto de 2016 17:41
    viernes, 5 de agosto de 2016 16:33
  • Leandro eso son ListaOpcionesModulos son clase Con capa de datos y negocios

    Capa de datos

    public DataTable ListaOpcionesModulos(DOpcionesModulos parOpcionesModulos)
            {
                DataTable TablaDatos = new DataTable("OpcionesModulos");
                SqlConnection SqlConexion = new SqlConnection();

                try
                {
                    SqlConexion.ConnectionString = DConexion.CnConexion;
                    SqlConexion.Open();

                    SqlCommand SqlComando = new SqlCommand();
                    SqlComando.Connection = SqlConexion;
                    SqlComando.CommandText = "ListaOpcionesModulos";
                    SqlComando.CommandType = CommandType.StoredProcedure;

                    SqlParameter parIdModulo = new SqlParameter();
                    parIdModulo.ParameterName = "@IdModulo";
                    parIdModulo.SqlDbType = SqlDbType.Int;
                    parIdModulo.Value = parOpcionesModulos.IdModulo;
                    SqlComando.Parameters.Add(parIdModulo);

                    SqlComando.ExecuteNonQuery();

                    SqlDataAdapter SqlAdaptadorDatos = new SqlDataAdapter(SqlComando);
                    SqlAdaptadorDatos.Fill(TablaDatos);

                }
                catch (Exception ex)
                {
                    TablaDatos = null;
                    throw new Exception("Error al intentar ejecutar el procedimiento almacenado ListaOpcionesModulos. " + ex.Message, ex);
                }
                finally
                {
                    SqlConexion.Close();
                }
                return TablaDatos;
            }

    Capa de Negocio

     public static DataTable ListaOpcionesModulos(int pIdModulo)
            {
                DOpcionesModulos OpcionesModulos = new DOpcionesModulos();
                OpcionesModulos.IdModulo = pIdModulo;
                return OpcionesModulos.ListaOpcionesModulos(OpcionesModulos);
            }

    viernes, 5 de agosto de 2016 17:02
  • si devuelves un datatable entonces deebrias usar el merge para ir acumulando

    private void llenarGridOpcionesModulos()
    {
    	try
    	{
    		DataTable temp = new DataTable();
    		//aqui tienes que crearle la estructura de campos
    		
    		for(int intY=0;intY<radCheckedListBoxModulo.CheckedItems.Count;intY++)
    		{
    
    			int selection = int.Parse(radCheckedListBoxModulo.CheckedItems[intY].Value.ToString());
    			
    			temp.Merge(NOpcionesModulos.ListaOpcionesModulos(selection));
    
    		}
    		
    		radGridViewAccesos.DataSource = temp;
    		
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show("Registro No Encontrado" + ex.ToString());
    	}
    }

    lo que recomendaria es que dejes de usar datatable y uses clase tipadas, como explico aqui

    [WinForms] Edición Empleados

    crea una clase de datos que devuelva List<> de una clase que defines y no datatable

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Gabriela345 viernes, 5 de agosto de 2016 17:40
    viernes, 5 de agosto de 2016 17:13
  • Gracias, no es necesario crear la estructura de campos..

    Gracias Por la Recomendacion de usar List ,Hare el mismo procedimiento capa de datos y negocios solo tengo que definir List  

    viernes, 5 de agosto de 2016 17:40