none
Maestro Detalles con una única query RRS feed

  • Pregunta

  • Buenos días,

    Resulta que tengo un producto que pertenece a una categoría y a un porveedor.

    Ejemplo:

    Pdto        - Cat - Prov

     Lapicero - Negro - Andres

     Lapicero - Negro - Juan

     Lapicero - Rojo - Andres

     Lapicero - Rojo - Alberto

     Lapicero - Azul - Andrea

     Lapiz - Rojo - Camilo

     Lapiz - Azul - Andres

     Lapiz - Verde - Maria

     

    Resulta que necesito mostrar en una página, no un reporte en Crystal Reports. Algo como lo siguiente

    Pdto: Lapicero

     Color: Negro

      Proveedor(es):

         Andres

         Juan

     Color: Rojo

      Proveedor(es)

       Andres

       Alberto

     Color: Azul

    Pdto: Lapiz

     Color: Rojo

      Proveedor(es)

      Camilo

    Color: Azul

      Proveedor(es)

      Andres

    Color: Verde

      Proveedor(es)

      Maria

     

     

    Creo que con eso me hago entender lo que quiero mostrar, resulta que si quisiera mostrar eso con Crystal Reports sería muy sencillo puesto que tengo una zona para los detalles y yo puedo crear más detalles de detalles. 

    Pero lo que quiero es mostrarlo en una página ASPX con los controles propios de .net (Datagrids, repeaters ... ). La duda que tengo es la siguietne resulta que quiero hacer esto pero con una única query o sea yo hago inner join de todas las tablas y en un solo resultado traigo todo como lo haría para Crystal Reports, como hago para que mis detalles sepan como van a estar configurados?....

     

    No sé si me hice entender pero me gustaría que me colaboraran con ideas de como hacer esto.

     

    Gracias

     


    La tecnologia te envuelve
    viernes, 17 de junio de 2011 16:38

Respuestas

Todas las respuestas

  • o como puedo hacer para hacer eso que quiero pero que en SQL desde un SP, me devuelva solo una tabla organizada como quiero mostrar mis resultados

     

    no sé no se no se es que no me imagino como hacer esto...


    La tecnologia te envuelve
    viernes, 17 de junio de 2011 16:43
  • Hola,

     

    Lo mas sencillo creo que seria utilizar unos datatables para realizar lo que buscas o bien desde el stored procedure hacer un join para que puedas devolver los datos.

    Mira estos dos ejemplo

    Master with datatable

    Master with join

     

    Saludos,



    Jason Ulloa
    Mi Blog San José, Costa Rica
    • Marcado como respuesta xGs_Manco viernes, 17 de junio de 2011 20:37
    viernes, 17 de junio de 2011 16:52
  • hola

    puedes hacerlo con un dataset tipado y dos datatable con una relation entre ellos

    Informe Maestro detalle utilizando DataSet y Crystal Report

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta xGs_Manco viernes, 17 de junio de 2011 20:37
    viernes, 17 de junio de 2011 16:59
  • Les cuento lo que hice fue lo siguiente:

     Como no necesitaba o no queria hacerlo con Crystal Reports lo que hice fue generar un grid con el resultado de mi consulta con todos los inner joins y al final utilicé una funcion que lo que hace es comparar todas las filas en la posición de una columna específica con la fila anterior.y si el valor en las dos filas es igual lo que hace es aumentar el colspan, para que quedé una única fila.

    El código de la funcion es el siguiente, (funciona para VS2003)

    public void Combinar_Filas(DataGrid gridView)
    		{
    			for (int rowIndex = gridView.Items.Count - 2; rowIndex >= 0; rowIndex--)
    			{
    				DataGridItem row = gridView.Items[rowIndex];
    				DataGridItem previousRow = gridView.Items[rowIndex + 1];
    
    				for (int i = 0; i < row.Cells.Count; i++)
    				{
    					if (row.Cells[0].Text == previousRow.Cells[0].Text & i != 1 & i != 2 & i != 3 & i != 4 & i != 5)
    					{
    						row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
    							previousRow.Cells[i].RowSpan + 1;
    						previousRow.Cells[i].Visible = false;
    					}
    
    					if (row.Cells[1].Text == previousRow.Cells[1].Text & i != 0 & i != 2 & i != 3 & i != 4 & i != 5)
    					{
    						row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
    							previousRow.Cells[i].RowSpan + 1;
    						previousRow.Cells[i].Visible = false;
    					}
    				}
    			}
    
    
    

    Se ejecuta en el prerender del Datagrid en vs2003 o el Gridview en VS2008.

    Aqui está para VS2005 o posterior por si alguien le sirve.

     

      public void Combinar_Filas(GridView gridView)
        {
          for (int rowIndex = gridView.Rows.Count - 2; rowIndex >= 0; rowIndex--)
          {
            GridViewRow row = gridView.Rows[rowIndex];
            GridViewRow previousRow = gridView.Rows[rowIndex + 1];
    
            for (int i = 0; i < row.Cells.Count; i++)
            {
              if (row.Cells[0].Text == previousRow.Cells[0].Text & i != 1 & i != 2 & i != 3 & i != 4 & i != 5)
              {
                row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                            previousRow.Cells[i].RowSpan + 1;
                previousRow.Cells[i].Visible = false;
              }
    
              if (row.Cells[1].Text == previousRow.Cells[1].Text & i != 0 & i != 2 & i != 3 & i != 4 & i != 5)
              {
                row.Cells[i].RowSpan = previousRow.Cells[i].RowSpan < 2 ? 2 :
                            previousRow.Cells[i].RowSpan + 1;
                previousRow.Cells[i].Visible = false;
              }
            }
          }
        }
    



    La tecnologia te envuelve
    viernes, 17 de junio de 2011 20:41