Sumar columna de Datagridview en Visual Basic Net
d
Hola amigos..esta es otra entrega que tal vez les sera tiles en momentos
que estn desarrollando una aplicacin de tal manera que algunas veces
necesitamos sumar columnas numricas del datagridview y sobre todo
presentarlas al final del mismo.
Entonces para ello mostremos una grilla llena de cantidades numricas que
se desea sumar y al final quede as:
Recuerda que debes poner en las propiedades del control datagridview
{AllowUserToAddRows=False}para evitar que el control
agregue automticamente filas
Al final el cdigo sobre el botn:
Private Sub Btnsumar_Click(sender As System.Object, e As
System.EventArgs) Handles Btnsumar.Click
Try
Dim n As Integer = 4 ' numero contador
Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
Dim valor As Double = 0.18 'valor de un articulo en comn
Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada
compra
Dim suma As Double 'almacena el total de la suma de la columna subtotal
For i As Integer = 0 To n - 1
cantidad(i) = Val(InputBox("Ingresar cantidad N" & i + 1))
Next
For i As Integer = 0 To n - 1
subtotal(i) = cantidad(i) * valor
suma = suma + subtotal(i)
Next
grid1.Rows.Add(n + 1) 'numero de filas del grid
For r As Integer = 0 To n - 1
grid1.Item(0, r).Value = r + 1
grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
grid1.Item(2, r).Value = Format(valor, "0.00")
grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
grid1.Item(2, n).Value = "TOTALES="
grid1.Item(3, n).Value = Format(suma, "0.00")
Next
Catch ex As KeyNotFoundException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
End Try
End Sub
Combo1.Datasource = Nothing se te limpia el combo.
Bueno tambien veo que ahi pones
da.Fill(ds)
intenta poniendo antes de eso
ds = new DataSet()
da.Fill(ds)
Simple ejemplo en visual basic.net , para cargar un campo de una tabla en un
control ComboBox
En el ejemplo, primero se crea una nueva conexin hacia la base de datos de de sql
server., en este caso se llama base_prueba
Paso 2, se crea un SqlCommand pasndole la consulta , por ejemplo : "Select
Campo From Tabla"
Paso 3 se llena un DataSet con los datos
Paso 4 se asigna al DataSource del ComboBox el dataset
Paso 5 Se indica a la propiedad DisplayMember del combobox , el nombre del
campo a visualizar
Cdigo fuente
Texto planoImprimir
1.
Option Explicit On
2.
Option Strict On
3.
4.
' Espacio
5.
Imports System.Data.SqlClient
6.
7.
Public Class Form1
8.
' Cadena de conexin
9.
Private Const cs As String = "Data Source=(local)\SQLEXPRESS;" & _
10.
"Integrated Security=True;" & _
11.
"Initial Catalog=bd_prueba"
12.
13.
14.
Private Sub Form1_Load( _
ByVal sender As System.Object, _
15.
ByVal e As System.EventArgs) Handles MyBase.Load
16.
17.
'enviar el control ComboBox y la consulta
18.
cargar_Combo(ComboBox1, "Select Apellido From t_clientes")
19.
20.
End Sub
21.
22.
Private Sub cargar_Combo( _
23.
ByVal ComboBox As ComboBox, _
24.
ByVal sql As String)
25.
26.
' nueva conexin indicando al SqlConnection la cadena de conexi
n
27.
Dim cn As New SqlConnection(cs)
28.
29.
Try
30.
31.
' Abrir la conexin a Sql
32.
cn.Open()
33.
34.
' Pasar la consulta sql y la conexin al Sql Command
35.
Dim cmd As New SqlCommand(sql, cn)
36.
37.
' Inicializar un nuevo SqlDataAdapter
38.
Dim da As New SqlDataAdapter(cmd)
39.
40.
'Crear y Llenar un Dataset
41.
Dim ds As New DataSet
42.
da.Fill(ds)
43.
44.
' asignar el DataSource al combobox
45.
ComboBox.DataSource = ds.Tables(0)
46.
47.
' Asignar el campo a la propiedad DisplayMember del combo
48.
ComboBox.DisplayMember = ds.Tables(0).Columns(0).Caption.ToS
tring
49.
50.
Catch ex As Exception
51.
MessageBox.Show(ex.Message.ToString, _
52.
"error", MessageBoxButtons.OK, _
53.
MessageBoxIcon.Error)
54.
Finally
55.
If cn.State = ConnectionState.Open Then
56.
cn.Close()
57.
58.
59.
End If
End Try
End Sub
60. End Class
Cdigo de ejemplo en Visual Basic.NET para crear un formulario Maestro Detalle
utilizando dos controles DataGridView
El formulario contiene dos DataGridview. El DataGridView1 es para la tabla maestro
donde se cargan los regisros de una tabla (tabla clientes) , y en el otro control
DatagridView, los datos de la tabla pedidos para el detalle
Ambas tablas tienen un campo en comn, (IdCliente). Al seleccionar un registro del
DV Maestro, se visualiza en el detalle , el o los pedidos de ese cliente en el otro DV
Para el ejemplo se necesita:
colocar dos controles DataGridview en el formulario ( llamados DvMaestro y
DvDetalle )
Indicar
el
campo
en
comn
para
ambas
tablas
en
la
'campo_Relacionado'.
Indicar las consultas sql para cargar los registros en ambas grillas
Formulario
Cdigo fuente
Texto planoImprimir
1.
Option Explicit On
2.
Option Strict On
3.
4.
5.
Imports System.Data.SqlClient
variable
6.
Public Class Form1
7.
8.
' cadena de conexin
9.
Private Const cs As String = "Data Source=(local)\SQLEXPRESS;" & _
10.
"Initial Catalog=la_base_de_datos_sql;" & _
11.
"Integrated Security=true"
12.
13.
' campo relacionado para las dos tablas
14.
' '''''''''''''''''''''''''''''''''''''''''''''''''''''
15.
Private Const campo_Relacionado As String = "IdCliente"
16.
17.
Private Sub Form1_Load( _
18.
ByVal sender As System.Object, _
19.
ByVal e As System.EventArgs) Handles MyBase.Load
20.
21.
' crear nueva conexin
22.
Dim conexion As New SqlConnection(cs.ToString)
23.
24.
25.
26.
Try
27.
' abrir la conexin con la base de datos
28.
conexion.Open()
29.
30.
' Nuevo objeto Dataset
31.
Dim DataSet As New DataSet
32.
33.
34.
' ''''''''''''''''''''''''''''''''''''''''''''''''''''
35.
' DataGridView maestro
36.
' ''''''''''''''''''''''''''''''''''''''''''''''''''''
37.
38.
Dim Adaptador As New SqlDataAdapter()
39.
Dim comando As New SqlCommand
40.
41.
With comando
42.
' Asignar el sql para seleccionar los datos de la tabla
Maestro
43.
.CommandText = "SELECT idcliente,Nombre,Apellido FROM tC
lientes"
44.
45.
.Connection = conexion
End With
46.
47.
With Adaptador
48.
.SelectCommand = comando
49.
' llenar el dataset
50.
Adaptador.Fill(DataSet, "Maestro")
51.
End With
52.
53.
' Enlazar el DataGridView al dataset
54.
With DvMaestro
55.
.DataMember = "Maestro"
56.
.DataSource = DataSet
57.
58.
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
59.
.DefaultCellStyle.BackColor = Color.AliceBlue
60.
61.
End With
62.
' ''''''''''''''''''''''''''''''''''''''''''''''''''''
63.
' DataGridView detalle
64.
' ''''''''''''''''''''''''''''''''''''''''''''''''''''
65.
66.
With comando
67.
68.
' cadena sql para cargar la tabla pedidos
.CommandText = "SELECT idcliente,FechaPedido, FechaEntre
ga,Monto,Destino FROM tPedidos"
69.
End With
70.
71.
With Adaptador
72.
.SelectCommand = comando
73.
' llenar el dataset
74.
Adaptador.Fill(DataSet, "Detalle")
75.
End With
76.
77.
' Agregar la relacin ( campo en comn : campo_Relacionado =
idCliente )
78.
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''
79.
With DataSet
80.
.Relations.Add("mi_Relacion", _
81.
.Tables("Maestro").Columns(campo_Relaciona
do), _
82.
.Tables("Detalle").Columns(campo_Relaciona
do))
83.
End With
84.
85.
86.
' Establecer el DataSource y el DataMember para el DataGridv
iew Detalle
87.
With DvDetalle
88.
.DataSource = DataSet
89.
.DataMember = "Maestro.mi_Relacion"
90.
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
91.
End With
92.
93.
' cerrar la conexn
94.
With conexion
95.
If .State = ConnectionState.Open Then
96.
.Close()
97.
End If
98.
.Dispose()
99.
End With
100.
101.
Catch ex As Exception
102.
103.
MsgBox(ex.Message.ToString)
End Try
104.
105.
Me.Text = "Formulario Maestro Detalle con dataGridviews"
106.
107.
108.
End Sub
109.
110.
End Class