Necesito ayuda con errores para ejecutar nuevo,eliminar,modificar y filatrar contacto
Publicado por maria (1 intervención) el 13/04/2013 12:10:11
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
'Importamos Librerias
Imports System.Data.OleDb
Public Class Form1
'VARIABLES A NIVEL DE CLASE FORM1
'El adaptador nos ayuda a las modificaciones de la tabla contactos
Dim adaptador As New AgendaDataSet1TableAdapters.ContactoTableAdapter
'La hemos declarado.
'AgendaDataSet1 nos ayuda a recorrer los datos de la tabla.
'El DataSet es como un contenedor de la tabla contacto que nos ayuda a recorrer las filas,datos,....
Dim arrayIds() As Integer
Dim filaSeleccionada As Integer 'La variable fila seleccionada se va poder leere desde toda la clase
Dim mensajeError As String = ""
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: esta línea de código carga datos en la tabla 'AgendaDataSet1.Contacto' Puede moverla o quitarla según sea necesario.
Me.ContactoTableAdapter.Fill(Me.AgendaDataSet1.Contacto)
'variable de conexion
Dim conexion As New OleDbConnection
conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\Maria82\Desktop\Agenda correcto\Agenda - prueba conexion 2\Agenda"
'variable para el sql comand
Dim comando As New OleDbCommand("SELECT * FROM Contacto")
comando.Connection = conexion
'variable adapter
Dim adaptador As New OleDbDataAdapter
adaptador.SelectCommand = comando
'variable que contendra a la tabla
Dim Tabla As New DataSet
'Interesa que la primera vez que se carga el formulario , se muestre los datos de la primera fila del Grid
cargaFilaSeleccionada(0)
'Deshabilito los dos botones que acabo de crear y los habilito solo en el Guardar
GuardarToolStripMenuItem1.Visible = False
CancelarToolStripMenuItem2.Visible = False
End Sub
Private Sub cargaColumnasDelGrid()
End Sub
Private Sub cargaFilasDelGrid()
ReDim arrayIds(AgendaDataSet1.Contacto.Rows.Count = 1)
For i As Integer = 0 To AgendaDataSet1.Contacto.Rows.Count - 1
'Se obtiene cada fila de la tabla contactos para después leer el valor de cada celda por fila
Dim fila As DataRow = AgendaDataSet1.Contacto.Item(i)
DataGridView1.Rows.Add() 'Fila en blanco y despues la relleno
'Al cargar la propiedad item me pedia columna y fila, no solo fila
'DataGriedView1.Item(0,1)= fila.Item(0) 'ID' Aqui estoy leyendo las columnas de una fila de datos de Contacto
arrayIds(i) = fila.Item(0) 'Guardo los ID´s y no los muestro
DataGridView1.Item(0, i).Value = CStr(fila.Item(1)) 'DNI
DataGridView1.Item(1, i).Value = fila.Item(2) 'LETRA_DNI
DataGridView1.Item(2, i).Value = fila.Item(3) 'APELLIDOS1
DataGridView1.Item(3, i).Value = fila.Item(4) 'APELLIDOS2
DataGridView1.Item(4, i).Value = fila.Item(5) 'NOMBRE
'Las posiciones del Grid empiezan en 0,como siempre
Next
End Sub
Private Sub cargaFilaSeleccionada(ByVal filaSeleccionada As Integer)
'Ahora cargo los datos del contacto seleccionado en ls campos
Me.txtDni.Text = DataGridView1.Item(0, filaSeleccionada).Value 'DNI
Me.txt_LetraDni.Text = DataGridView1.Item(1, filaSeleccionada).Value 'LETRA_DNI
Me.txtApellido1.Text = DataGridView1.Item(2, filaSeleccionada).Value 'APELLIDO1
Me.txtApellido2.Text = DataGridView1.Item(3, filaSeleccionada).Value 'APELLIDO2
Me.txtNombre.Text = DataGridView1.Item(4, filaSeleccionada).Value 'NOMBRE
End Sub
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
'Aqui si que puedo saber la fila seleccionada
filaSeleccionada = e.RowIndex
'este código quiero reutilizarlo desde otro eventos,para ello,encapsulo en código en un procedimiento
cargaFilaSeleccionada(filaSeleccionada)
End Sub
Private Sub pcbSiguiente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbSiguiente.Click
'Ahora si que tenemos la filaSeleccionada
If filaSeleccionada = DataGridView1.Rows.Count - 1 Then
MessageBox.Show("No hay más filas para seleccionar")
Else
filaSeleccionada = filaSeleccionada + 1
cargaFilaSeleccionada(filaSeleccionada)
'Al utilizar el boton Siguiente debe seleccionar fila correspondiente, para ello, utilizamos siguiente código:
DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
End If
End Sub
Private Sub pcbAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbAnterior.Click
If filaSeleccionada = 0 Then
MessageBox.Show("No hay más filas para seleccionar")
Else
filaSeleccionada = filaSeleccionada - 1
cargaFilaSeleccionada(filaSeleccionada)
DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
End If
End Sub
Private Sub pcbPrimero_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbPrimero.Click
filaSeleccionada = 0
cargaFilaSeleccionada(filaSeleccionada)
DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
End Sub
Private Sub pcbUltimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pcbUltimo.Click
filaSeleccionada = DataGridView1.Rows.Count - 1
cargaFilaSeleccionada(filaSeleccionada)
DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
End Sub
Private Sub NuevoToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NuevoToolStripMenuItem1.Click
'CUANDO PINCHE NUEVO , LIMPIAREMOS LOS CAMPOS Y DEJAREMOS QUE ESCRIBA UNO NUEVO
limpiarCamposPantalla()
GuardarToolStripMenuItem1.Visible = True
CancelarToolStripMenuItem2.Visible = True
End Sub
Private Sub limpiarCamposPantalla()
Me.txtDni.Text = ""
Me.txt_LetraDni.Text = ""
Me.txtApellido1.Text = ""
Me.txtApellido2.Text = ""
Me.txtNombre.Text = ""
'Se pone el foco en el primer campo
Me.txtDni.Focus()
' Se va a deshabilitar todas las opciones y solo voy a dejar dos opciones: Guardar y Cancelar
End Sub
Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked
End Sub
Private Sub GuardarToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GuardarToolStripMenuItem1.Click
'En este punto se debe guardar el contacto en la BD.
'Antes de cualquier cambio se debe realizar una validación de todos lso campos escrito por el usuario en pantalla
If validarCamposPantalla() Then
'Si devuelve True guardo
MessageBox.Show("Voy a ir a la BD.Los campos son correctos")
'Vamos a guardar
Dim numDni As Integer = CInt(Me.txtDni.Text)
Dim respuesta As Integer = adaptador.altaContacto(numDni, Me.txt_LetraDni.Text, Me.txtApellido1.Text, Me.txtApellido2.Text, Me.txtNombre.Text)
If respuesta > 0 Then
MessageBox.Show("Se ha guardado correctamente. ")
Else
MessageBox.Show("Error al guardar el contacto. ")
End If
'Esta función devuelve un valor positivo si se ha creado bien y negativo si ocurre lo contrario.
'Ahora se debe recargar el DataGrid con los nuevos datos.
recargaPantalla()
'Nos falta corregir algunas cosas
Else
'Mostrare el mensaje de error.Para poder verla desde aqui la msotrare a nivel de clase.
MessageBox.Show(mensajeError)
End If
End Sub
Private Sub limpiaGrid()
For i As Integer = 0 To DataGridView1.Rows.Count - 2
'Pongo -2 porque siempre debemos dejar una fila en el Grid sin oda error.
DataGridView1.Rows.RemoveAt(0) 'Borro siempre la primera , porque el Grid decrece
Next
End Sub
Private Sub recargaPantalla()
Me.ContactoTableAdapter.Fill(Me.AgendaDataSet1.Contacto)
'variable de conexion
Dim conexion As New OleDbConnection
conexion.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= C:\Users\Maria82\Desktop\Agenda correcto\Agenda - prueba conexion 2\Agenda"
'variable para el sql comand
Dim comando As New OleDbCommand("SELECT * FROM Contacto")
comando.Connection = conexion
'variable adapter
Dim adaptador As New OleDbDataAdapter
adaptador.SelectCommand = comando
'variable que contendra a la tabla
Dim Tabla As New DataSet
'Antes de recargar, debo eliminar todas las anteriores y cargar las nuevas
limpiaGrid()
cargaFilasDelGrid()
'Deshabilito los dos botones que acabo de crear y los habilito solo en el Guardar
GuardarToolStripMenuItem1.Visible = False
CancelarToolStripMenuItem2.Visible = False
End Sub
Private Function validarCamposPantalla() As Boolean
If Me.txtDni.Text = "" Or Not dimeSiEsNumero(Me.txtDni.Text) Then
mensajeError = "El dni es incorrecto. "
Me.txtDni.SelectAll()
Me.txtNombre.Focus()
Return False
End If
Return True
End Function
Private Function dimeSiEsNumero(ByVal cadena As String) As Boolean
'Código para validar DNI
'Esta función convierte el Dni en un array y comprueba letra a letra o numero a numero
Dim arrayCadena() As Char = cadena.ToCharArray
For i As Integer = 0 To arrayCadena.Length - 1
If IsNumeric(arrayCadena(i)) = False Then
'Si encontrara una letra devolveria False.Diria No es numero
Return False
End If
Next
Return True
End Function
Private Sub CancelarToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelarToolStripMenuItem2.Click
'si pincho Cancelar no hago ninguna acción
limpiarCamposPantalla()
End Sub
Private Sub ModificarToolStripMenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem2.Click
'vamos a modificar
'Recordar que nos lo habiamos guardado en un array en orden
Dim id As Integer = arrayIds(filaSeleccionada)
'adaptador.modificarContacto(txtDni.Text, txt_LetraDni.Text, txtApellido1.Text, txtApellido2.Text, txtNombre.Text, id)
recargaPantalla()
cargaFilaSeleccionada(filaSeleccionada)
DataGridView1.CurrentCell = DataGridView1.Rows.Item(filaSeleccionada).Cells(0)
End Sub
Private Sub EliminarToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem3.Click
'Vamos a eliminar
'adaptador.eliminaContacto(id)
recargaPantalla()
cargaFilaSeleccionada(DataGridView1.Rows.Count - 1)
DataGridView1.CurrentCell = DataGridView1.Rows.Item(0).Cells(DataGridView1.Rows.Count - 1)
End Sub
Private Sub PorNombreToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PorNombreToolStripMenuItem.Click
Dim filtro As String = InputBox("", "Dime el nombre por el que quieres filtras los datos")
' Dim filtroNombre As DataTable = adaptador.filtraPorNombre("" & filtro & "")
limpiaGrid()
'cargaTablaFiltrada(filtroNombre)
End Sub
Private Sub cargaTablaFiltrada(ByVal TablaFiltrada As DataTable)
For i As Integer = 0 To TablaFiltrada.Rows.Count - 1
'Se obtiene cada fila de la tabla contactos para después leer el valor de cada celda por fila
Dim fila As DataRow = TablaFiltrada.Rows(i)
DataGridView1.Rows.Add() 'Fila en blanco y despues la relleno
'Al cargar la propiedad item me pedia columna y fila, no solo fila
'DataGriedView1.Item(0,1)= fila.Item(0) 'ID' Aqui estoy leyendo las columnas de una fila de datos de Contacto
arrayIds(i) = fila.Item(0) 'Guardo los ID´s y no los muestro
DataGridView1.Item(0, i).Value = CStr(fila.Item(1)) 'DNI
DataGridView1.Item(1, i).Value = fila.Item(2) 'LETRA_DNI
DataGridView1.Item(2, i).Value = fila.Item(3) 'APELLIDOS1
DataGridView1.Item(3, i).Value = fila.Item(4) 'APELLIDOS2
DataGridView1.Item(4, i).Value = fila.Item(5) 'NOMBRE
'Las posiciones del Grid empiezan en 0,como siempre
Next
End Sub
Private Sub PorDniToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PorDniToolStripMenuItem.Click
Dim filtro As String = InputBox("", "Dime el nombre por el que quieres filtras los datos")
Dim filtroDni As DataTable = adaptador.filtraPorDni(CInt(filtro))
limpiaGrid()
cargaTablaFiltrada(filtroDni)
End Sub
Private Sub TodosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TodosToolStripMenuItem.Click
recargaPantalla()
End Sub
End Class
Valora esta pregunta


0