lunes, 7 de diciembre de 2015

Completo



BASE DE DATOS

Primero generamos los contenidos de las tablas
Deberán quedar así.


Luego generamos el SP para lectura

CREATE PROCEDURE [dbo].[golf]
AS
BEGIN
select a.socio as "socio", a.nombre as "nombre_socio", a.apellido as "apellido_socio", b.nombre as "nombre_cancha", b.par as "Par_cancha",
c.golpes as "Golpes", c.fecha as "Fecha"
from socio a, cancha b, tarjeta c
where a.socio = c.id_socio
and b.cancha = c.id_cancha
order by a.socio, c.fecha desc;

END




VB NET


Luego pasamos a VB NET para generar el proyecto.





Agrego solo dos gridview y un botón.


Public Class WebForm1
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        grilla()

    End Sub

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim dt As New DataTable
        Dim da As New Data.SqlClient.SqlDataAdapter
        da.SelectCommand = New SqlClient.SqlCommand
        da.SelectCommand.Connection = New SqlClient.SqlConnection(My.Resources.conn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.CommandText = ("golf")
        da.Fill(dt)

        Dim promedio As Integer = 0
        Dim suma As Integer = 0
        Dim socio1 As Integer = 33
        Dim socio2 As Integer
        Dim socio3 As Integer
        Dim cuenta As Integer
        Dim parcial As Integer
        Dim dtf As New DataTable()

        'Genero un DT para cargar los valores de salida.
        dtf.Columns.AddRange(New DataColumn()
{New DataColumn("Id_Socio", GetType(Integer)),
New DataColumn("Promedio", GetType(Integer))})

        For i = 0 To dt.Rows.Count - 1
            socio3 = dt.Rows(i).Item("socio")

            'Comparo el Nro de Socio cargado antes de entrar con el actual.
            'Como son distintos va a entrar
            If socio1 <> socio3 Then
                socio1 = dt.Rows(i).Item("socio")

                'El segundo For recorre comenzando desde el valor de la posición actual del primero
                For z = i To dt.Rows.Count - 1
                    socio2 = dt.Rows(z).Item("socio")

                    'Si son iguales opero
                    If socio1 = socio2 Then

                        'Acumuladores
                        If dt.Rows(z).Item("Par_cancha") < dt.Rows(z).Item("Golpes") Then
                            parcial = dt.Rows(z).Item("Golpes") - dt.Rows(z).Item("Par_cancha")
                            suma = suma + parcial
                            cuenta = cuenta + 1
                        End If

                        If dt.Rows(z).Item("Par_cancha") > dt.Rows(z).Item("Golpes") Then
                            parcial = dt.Rows(z).Item("Par_cancha") - dt.Rows(z).Item("Golpes")
                            suma = suma + parcial
                            cuenta = cuenta + 1
                        End If

                        'Si no son iguales es que cambio el socio
                    Else
                        'Calculo el promedio
                        promedio = suma / cuenta

                        'Asigno a la DT
                        dtf.Rows.Add(socio1, promedio)

                        'Blaqueo variables
                        suma = 0
                        cuenta = 0
                        promedio = 0

                        Exit For
                    End If
                Next
            End If
        Next

        'Esto lo calculo y lo muestro para el último
        promedio = suma / cuenta
        dtf.Rows.Add(socio1, promedio)
        'Asigno valores a la DT final
        GridView2.DataSource = dtf
        GridView2.DataBind()

    End Sub

    Public Sub grilla()

        Dim dt As New DataTable
        Dim da As New Data.SqlClient.SqlDataAdapter
        da.SelectCommand = New SqlClient.SqlCommand
        da.SelectCommand.Connection = New SqlClient.SqlConnection(My.Resources.Conn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.CommandText = ("golf")
        da.Fill(dt)
        GridView1.DataSource = dt
        GridView1.DataBind()

    End Sub
End Class