Visual Basic.NET - cargar datos sql a datagridview y de forma normal vb.net

 
Vista:
sin imagen de perfil
Val: 30
Ha aumentado 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

cargar datos sql a datagridview y de forma normal vb.net

Publicado por JOSUE (20 intervenciones) el 24/06/2022 00:03:28
buenas tardes

tengo lo siguiente:

'este metodo carga lo del sql server al datagridview con columnas ya asignadas en el formulario
Private Sub BTNCARGAR_Click(sender As Object, e As EventArgs) Handles BTNCARGAR.Click
DGVGENERAL.Rows.Clear()
'DGVGENERAL.Columns.RemoveAt(DGVGENERAL.Columns.Count - 1)
Dim ADAPTADOR As New SqlDataAdapter
Dim COMANDO As String = "SELECT EMPLEADO, TIPO, NACIONALIDAD, IDENTIDAD, CORRELATIVO, NOMBRE_PACIENTE, " _
& "PRIMER_APELLIDO, SEGUNDO_APELLIDO, SEXO, ESPECIALIDAD, MEDICO, CLINICA, CENSADO, CITADO " _
& "FROM TEMP_CENSO WHERE EMPLEADO='" & LOGIN.TXTUSUARIO.Text & "'"
Dim DATO As DataSet
ADAPTADOR = New SqlDataAdapter(COMANDO, CONEXION)
DATO = New DataSet
ADAPTADOR.Fill(DATO)
Try
If DATO.Tables(0).Rows.Count > 0 Then
'DGVGENERAL.DataSource = DATO.Tables(0).DefaultView
For I = 0 To DATO.Tables(0).Rows.Count - 1
DGVGENERAL.Rows.Add(
DATO.Tables(0).Rows(I).Item("EMPLEADO"),
DATO.Tables(0).Rows(I).Item("TIPO"),
DATO.Tables(0).Rows(I).Item("NACIONALIDAD"),
DATO.Tables(0).Rows(I).Item("IDENTIDAD"),
DATO.Tables(0).Rows(I).Item("CORRELATIVO"),
DATO.Tables(0).Rows(I).Item("NOMBRE_PACIENTE"),
DATO.Tables(0).Rows(I).Item("PRIMER_APELLIDO"),
DATO.Tables(0).Rows(I).Item("SEGUNDO_APELLIDO"),
DATO.Tables(0).Rows(I).Item("SEXO"),
DATO.Tables(0).Rows(I).Item("ESPECIALIDAD"),
DATO.Tables(0).Rows(I).Item("MEDICO"),
DATO.Tables(0).Rows(I).Item("CLINICA"),
Format(CDate(DATO.Tables(0).Rows(I).Item("CENSADO")), "dd/MMMM/yyyy"),
Format(CDate(DATO.Tables(0).Rows(I).Item("CITADO")), "dd/MMMM/yyyy"))
Next
ElseIf DATO.Tables(0).Rows.Count = 0 Then
MsgBox("NO HAY NINGUN DATO ALMACENADO PARA CARGAR")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
TXTTOTAL.Text = DGVGENERAL.Rows.Count
end sub

'este metodo carga registros nuevos en el datagridview
Sub AGREGAR()
Dim CENSO As String = Format(CDate(CENSADO.Value), "dd/MMMM/yyyy")
Dim CITA As String = Format(CDate(CITADO.Value), "dd/MMMM/yyyy")
DGVGENERAL.Rows.Add(LOGIN.TXTUSUARIO.Text, CMBCLASIFICACION.Text, CMBNACIONALIDAD.Text, TXTIDENTIDAD.Text,
TXTCORRELATIVO.Text, TXTNOMBRES.Text, TXTPRIMERAPELLIDO.Text, TXTSEGUNDOAPELLIDO.Text,
CMBSEXO.Text, TXTESPECIALIDAD.Text, TXTMEDICO.Text, TXTCLINICA.Text, CENSO, CITA)
End Sub

EL PROBLEMA QUE PRESENTE ESTOS METODOS ES QUE ME SALE EL MENSAJE:
"no se pueden agregar filas mediante programación a la colección de filas de datagridview cuando el control está enlazado a datos"

LO QUE NECESITO ES QUE EL METODO SQL A DATAGRIDVIEW CARGUE LA INFORMACION PARA LUEGO AGREGAR REGISTROS NUEVOS EN EL DATAGRIDVIEW LLAMADA "DGVGENERAL". PARA LUEGO GUARDAR

GRACIAS DE ANTEMANO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

cargar datos sql a datagridview y de forma normal vb.net

Publicado por Phil Rob (1562 intervenciones) el 24/06/2022 09:05:11
Hola,

Este código es fuente de problemas !
Debes lo cambiar para esperar buenos resultados.

El DataAdapter no da un DataSet pero da un DataTable. el DataSet es un colección de DataTable y tu DataSet Dato recibe un DataTable por defecto pero no es bien trabajar.

Primero, el DataSet debe ser declarado al inicial del Form, no en un procedimiento. De esta manera, lo sera accesible en todos procedimientos.
En el procedimiento, debe declarar un New DataTable para el Adapter. Es este DataTable que debe dar los datos al DGV por afectación de su propiedad DataSource. Después este momento, debe nada hacer para ver los datos en el DGV, sobre todo, no añadir las lineas con For ...
Cuando quieres añadir líneas en el DGV, debes lo hacer en el DataTable y el DGV sera actualizado automáticamente.

Ejemplo :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Class UnForm
 
Dim MiDatos As New DataSet
 
Private Sub BTNCARGAR_Click(sender As Object, e As EventArgs) Handles BTNCARGAR.Click
DGVGENERAL.Rows.Clear()
 
Dim ADAPTADOR As New SqlDataAdapter
Dim COMANDO As String = "SELECT EMPLEADO, TIPO, NACIONALIDAD, IDENTIDAD, CORRELATIVO, NOMBRE_PACIENTE, " _
& "PRIMER_APELLIDO, SEGUNDO_APELLIDO, SEXO, ESPECIALIDAD, MEDICO, CLINICA, CENSADO, CITADO " _
& "FROM TEMP_CENSO WHERE EMPLEADO='" & LOGIN.TXTUSUARIO.Text & "'"
Dim DATO As DataTable  '     No DataSet
ADAPTADOR = New SqlDataAdapter(COMANDO, CONEXION)
DATO = New DataTable
ADAPTADOR.Fill(DATO)
DATO.TableName = "TEMP_CENSO"  ' por ejemplo; Dar nombre al DataTable permite de lo encontrar fácilmente
MiDatos.Tables.Add(DATO)   ' Ahora, este DataTable es accesible en todo el Form
DGVGENERAL.DataSource = MiDatos.Tables("TEMP_CENSO")  ' Nada otro a hacer
'
' No Try con mensaje "NO HAY NINGUN DATO ALMACENADO PARA CARGAR", cuando ningun dato, el DGV se queda vacia
TXTTOTAL.Text = DGVGENERAL.Rows.Count
end sub
 
' y para Agregar, haces lo con el DataTable
 
Sub AGREGAR()
Dim CENSO As String = Format(CDate(CENSADO.Value), "dd/MMMM/yyyy")
Dim CITA As String = Format(CDate(CITADO.Value), "dd/MMMM/yyyy")
MiDatos.Tables("TEMP_CENSO").Rows.Add(LOGIN.TXTUSUARIO.Text, CMBCLASIFICACION.Text, CMBNACIONALIDAD.Text, TXTIDENTIDAD.Text,
TXTCORRELATIVO.Text, TXTNOMBRES.Text, TXTPRIMERAPELLIDO.Text, TXTSEGUNDOAPELLIDO.Text,
CMBSEXO.Text, TXTESPECIALIDAD.Text, TXTMEDICO.Text, TXTCLINICA.Text, CENSO, CITA)
End Sub

Cuando simplificas este código, podemos ver si otros problemas.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar