Dim i As Integer
If DataTable1DataGridView.Rows.Count > 0 Then
For i = 0 To DataTable1DataGridView.Rows.Count - 2
Dim nuevafila As DataRow = SuperDataSet.Tables("DetallesPedido").NewRow
nuevafila.Item("IdPedido") = DataTable1DataGridView.Rows(i).Cells(0).Value
nuevafila.Item("IdProducto") = DataTable1DataGridView.Rows(i).Cells(1).Value
nuevafila.Item("Cantidad") = DataTable1DataGridView.Rows(i).Cells(3).Value
SuperDataSet.Tables("DetallesPedido").Rows.Add(nuevafila)
Next
End If
martes, 6 de marzo de 2012
Calcular datos dentro de celdas
Private Sub DataTable1DataGridView_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellEndEdit
If e.ColumnIndex = 3 Then
DataTable1DataGridView.CurrentRow.Cells(4).Value = DataTable1DataGridView.CurrentRow.Cells(2).Value * DataTable1DataGridView.CurrentRow.Cells(3).Value
End If
End Sub
If e.ColumnIndex = 3 Then
DataTable1DataGridView.CurrentRow.Cells(4).Value = DataTable1DataGridView.CurrentRow.Cells(2).Value * DataTable1DataGridView.CurrentRow.Cells(3).Value
End If
End Sub
Encontrar e insertar un dato en un datagridview después de dejar una celda
Private Sub DataTable1DataGridView_CellLeave(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellLeave
If e.ColumnIndex = 1 Then
Dim fila As Integer = ProductosBindingSource.Find("NombreProducto", DataTable1DataGridView.CurrentCell.EditedFormattedValue)
ProductosBindingSource.Position = fila
DataTable1DataGridView.CurrentRow.Cells(2).Value = SuperDataSet.Tables("Productos").Rows(fila).Item("Precio")
End If
End Sub
Primero se le asigna a fila la posición de esa fila en la tabla de donde queremos coger el dato
Luego asignamos a la celda (en este caso la 2 es precio) el valor de la tabla productos de la fila (fila que es el indice que hemos cogido antes) y de la fila la propiedad llamada precio, con lo cual cogerá el precio del nombre de producto que hemos seleccionado en la tabla origen
If e.ColumnIndex = 1 Then
Dim fila As Integer = ProductosBindingSource.Find("NombreProducto", DataTable1DataGridView.CurrentCell.EditedFormattedValue)
ProductosBindingSource.Position = fila
DataTable1DataGridView.CurrentRow.Cells(2).Value = SuperDataSet.Tables("Productos").Rows(fila).Item("Precio")
End If
End Sub
Primero se le asigna a fila la posición de esa fila en la tabla de donde queremos coger el dato
Luego asignamos a la celda (en este caso la 2 es precio) el valor de la tabla productos de la fila (fila que es el indice que hemos cogido antes) y de la fila la propiedad llamada precio, con lo cual cogerá el precio del nombre de producto que hemos seleccionado en la tabla origen
Filtro entre fechas y ordenado por un campo
DataView1.Table = SuperDataSet.Tables("Pedidos")
DataView1.RowFilter = "FechaPedido >='" & CDate(TextBox1.Text) & "' and Fechapedido <='" & CDate(TextBox2.Text) & "'"
DataView1.Sort = "IdEmpleado"
PedidosDataGridView.DataSource = DataView1
hay que convertir los .text en fecha
DataView1.RowFilter = "FechaPedido >='" & CDate(TextBox1.Text) & "' and Fechapedido <='" & CDate(TextBox2.Text) & "'"
DataView1.Sort = "IdEmpleado"
PedidosDataGridView.DataSource = DataView1
hay que convertir los .text en fecha
Filtrar datos con el dataview
DataView1.Table = SuperDataSet.Tables("Compras")
DataView1.RowFilter = "Recibido=False"
ComprasDataGridView.DataSource = DataView1
Acuerdate de agregar el componente dataview al cuadro de herramientas de datos
DataView1.RowFilter = "Recibido=False"
ComprasDataGridView.DataSource = DataView1
Acuerdate de agregar el componente dataview al cuadro de herramientas de datos
Mostrar otro campo en un combobox con una tabla relacionada
En las propiedades en databindings
SelectedValue será el campo original de la tabla presente
Text será el campo que queramos relacionar (si tenemos un id, y preferimos que se vea el campo nombre)
DataSource la otra tabla, la original del dato que queremos mostrar (la que no está presente en el formulario)
Displaymember, elegimos el campo que queremos mostrar (aquí es mas fácil porqué nos mostrara solo los campos de la tabla datasource escogida)
Valuemember, el campo clave, el que tiene que ir relacionado con el selectedvalue de la otra tabla (también es "fácil" porque nos mostrará solo los campos de la tabla datasource)
SelectedValue será el campo original de la tabla presente
Text será el campo que queramos relacionar (si tenemos un id, y preferimos que se vea el campo nombre)
DataSource la otra tabla, la original del dato que queremos mostrar (la que no está presente en el formulario)
Displaymember, elegimos el campo que queremos mostrar (aquí es mas fácil porqué nos mostrara solo los campos de la tabla datasource escogida)
Valuemember, el campo clave, el que tiene que ir relacionado con el selectedvalue de la otra tabla (también es "fácil" porque nos mostrará solo los campos de la tabla datasource)
Hacer una búsqueda de un registro
Dim posicion As Integer
posicion = ClientesBindingSource.Find(ToolStripComboBox1.SelectedItem.ToString, ToolStripTextBox1.Text)
If posicion <> -1 Then
ClientesBindingSource.Position = posicion
Else
MessageBox.Show("Ese cliente no existe")
End If
posicion = ClientesBindingSource.Find(ToolStripComboBox1.SelectedItem.ToString, ToolStripTextBox1.Text)
If posicion <> -1 Then
ClientesBindingSource.Position = posicion
Else
MessageBox.Show("Ese cliente no existe")
End If
Cargando los nombres de los campos de una tabla en un combobox
For i = 0 To SuperDataSet.Clientes.Count - 1
ToolStripComboBox1.Items.Add(SuperDataSet.Clientes.Columns.Item(i))
Next
ToolStripComboBox1.Items.Add(SuperDataSet.Clientes.Columns.Item(i))
Next
domingo, 4 de marzo de 2012
Gestión de errores --- Try Catch
Try
EmpleadoBindingSource.EndEdit()
OleDbDataAdapter1.Update(DataSet11, "Empleado")
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message.ToString)
Catch ex As ConstraintException
MessageBox.Show(ex.Message.ToString)
Catch ex As NoNullAllowedException
MessageBox.Show(ex.Message.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
EmpleadoBindingSource.EndEdit()
OleDbDataAdapter1.Update(DataSet11, "Empleado")
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message.ToString)
Catch ex As ConstraintException
MessageBox.Show(ex.Message.ToString)
Catch ex As NoNullAllowedException
MessageBox.Show(ex.Message.ToString)
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
sábado, 3 de marzo de 2012
Otra forma de moverse entre datos y datagridviews
Si no podemos navegar entre los datagridviews con el control bindingsource (bindingsource1.movenext())
tenemos este otro sistema
Private Sub bprimero_Click(sender As System.Object, e As System.EventArgs) Handles bprimero.Click
DataGridView1.CurrentCell = DataGridView1(0, 0)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub banterior_Click(sender As System.Object, e As System.EventArgs) Handles banterior.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bsiguiente_Click(sender As System.Object, e As System.EventArgs) Handles bsiguiente.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex + 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bultimo_Click(sender As System.Object, e As System.EventArgs) Handles bultimo.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.Rows.Count - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
tenemos este otro sistema
Private Sub bprimero_Click(sender As System.Object, e As System.EventArgs) Handles bprimero.Click
DataGridView1.CurrentCell = DataGridView1(0, 0)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub banterior_Click(sender As System.Object, e As System.EventArgs) Handles banterior.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bsiguiente_Click(sender As System.Object, e As System.EventArgs) Handles bsiguiente.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex + 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
Private Sub bultimo_Click(sender As System.Object, e As System.EventArgs) Handles bultimo.Click
DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.Rows.Count - 1)
Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
End Sub
viernes, 2 de marzo de 2012
Crear relación maestro detalle
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
OleDbDataAdapter1.Fill(DataSet11, "Tipo De Producto")
OleDbDataAdapter2.Fill(DataSet11, "Producto")
DataSet11.Relations.Add("Relacionproductos", DataSet11.Tables("Tipo de producto").Columns("Product type ID"), DataSet11.Tables("Producto").Columns("ID del tipo de producto"))
Me.DataGridView1.DataSource = DataSet11
Me.DataGridView1.DataMember = "Tipo de producto"
Me.DataGridView2.DataSource = DataSet11
Me.DataGridView2.DataMember = "Tipo de producto.Relacionproductos"
End Sub
después de cargar los dataadapters, creo una relación, cogiendo tipo de producto como tabla maestra y producto como la tabla detalle, relacionándolas por el registro en común, después al primer datagridview le pongo de datasource el dataset11 y de datamember la tabla tipo de producto, y para el datagridview2 el datamember cambia a ser el de tipo de producto.relacionproductos siendo relacionproductos la relación que acabamos de crear
OleDbDataAdapter1.Fill(DataSet11, "Tipo De Producto")
OleDbDataAdapter2.Fill(DataSet11, "Producto")
DataSet11.Relations.Add("Relacionproductos", DataSet11.Tables("Tipo de producto").Columns("Product type ID"), DataSet11.Tables("Producto").Columns("ID del tipo de producto"))
Me.DataGridView1.DataSource = DataSet11
Me.DataGridView1.DataMember = "Tipo de producto"
Me.DataGridView2.DataSource = DataSet11
Me.DataGridView2.DataMember = "Tipo de producto.Relacionproductos"
End Sub
después de cargar los dataadapters, creo una relación, cogiendo tipo de producto como tabla maestra y producto como la tabla detalle, relacionándolas por el registro en común, después al primer datagridview le pongo de datasource el dataset11 y de datamember la tabla tipo de producto, y para el datagridview2 el datamember cambia a ser el de tipo de producto.relacionproductos siendo relacionproductos la relación que acabamos de crear
Suscribirse a:
Comentarios (Atom)