CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Fila Seleccionada De Datagrid
(1/1)
Black_angel:
Hola a todos de nuevo,
Estoy construyendo un formulario el cuál quiero que muestre datos en un DataGrid. Para ello he incluido un objeto OleDBDataAdapter "OleDBDataAdapter1", un objeto OleDbConnection "OleDbConnection1", un DataSet "DataSet1" y el DataGrid "DataGrid1".
He realizado la conexión de todos estos objetos según indica el libro de Eidos mediante el IDE poniendo como consulta SQL: SELECT * FROM PERSONA. (La tabla persona contine los campos Clave, Nombre, Edad, Altura)
Hasta aquí todo correcto, doy a depurar y se muestran en el DataGrid todos los campos de la tabla PERSONA con sus correspondientes datos.
Ahora lo que quiero hacer es añadir un botón el cuál al ser pinchado coja el valor contenido en el campo "Clave" de la FILA SELECCIONADA por el usuario.
¿Cómo hago esto? ¿Qué propiedad de estos objetos creados me devuelve el valor de un campo "Clave" de la fila seleccionada?
Y otra pregunta, si en tiempo de ejecución quiero cambiar la consulta SQL por ejemplo poniendo una condición más: SELECT * FROM PERSONA WHERE Edad=20 sería el objeto OleDbDataAdapter el que tendría que utilizar? ¿de qué forma?
Gracias de antemano por las respuestas. Un saludo :hola:
sergiotarrillo:
Lo primero no lo recuerdo pero hay una funcion que permite recuperar la fila selecionada, no lo recuerdo ahorita lo segundo lo harias asi:
Creas un sqlCommand:
--- Código: Text --- dim myCommnad as New OleDBCommand("SELECT * FROM PERSONA WHERE Edad=20")tuAdapter.Command = myCommand 'llenando el datasettuAdapter.Fill(tuDataSet,"nPersona") 'ahora lo enlazas a la GrillatuGrid.setDataBinding(tuDataSet,"nPersona")
Esa es la idea si no te corre me pasas la voz para hacerlo en mi maquina.....
Black_angel:
Hola Seghio,
gracias por contestar, he probado tu código pero no consigo hacer que funcione. Aquí pongo lo que tengo puesto a ver si es que tengo yo algo mal:
Dim myCommand As New System.Data.OleDb.OleDbCommand("SELECT * FROM Persona WHERE Edad=20")
myCommand.Connection = Me.OleDbConnection1 /*Esto lo he tenido que poner porque sino me daba error en la siguiente linea diciéndome que no estaba establecida la conexión*/
Me.OleDbDataAdapter1.SelectCommand = myCommand
'llenando el dataset
Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Atleta")
'ahora lo enlazas a la Grilla
Me.DataGrid1.SetDataBinding(Me.DataSet11, "Atleta")
Me.DataGrid1.Refresh() /*Esto lo he puesto por si acaso, pero ni con él ni sin él me va*/
Ya he encontrado la función que devuelve la fila seleccionada, es la función CurrentRowIndex():
MessageBox.Show(Me.DataGrid1.CurrentRowIndex()) te muestra el índice de la fila seleccionada.
Gracias de nuevo :hola:
Black_angel:
Otra pregunta más,
¿Cómo podría hacer que el SELECT de la consulta SQL me devuelva como máximo un número "X" de tuplas? (por si la BD es muy grande que no esté mucho tiempo)
Gracias de nuevo de antemano por las respuestas :)
Black_angel:
Ya he resuelto el problema del Datagrid en tiempo de ejecución, el código lo he sacado del libro Eidos de Visual Basic .NET que además modifica el tamaño de las columnas, pone colores,...
' Crear conexión
Dim oConexion As System.Data.OleDb.OleDbConnection
oConexion = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & System.IO.Directory.GetCurrentDirectory & "\persona.mdb")
' crear adaptador
Dim oDataAdapter As System.Data.OleDb.OleDbDataAdapter
oDataAdapter = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Persona WHERE Edad=20", oConexion)
' crear commandbuilder
Dim oCB As System.Data.OleDb.OleDbCommandBuilder = New System.Data.OleDb.OleDbCommandBuilder(oDataAdapter)
' crear dataset
'Dim odataSet As WindowsApplication2.DataSet1()
'odataSet = New WindowsApplication2.DataSet1
oDataAdapter.Fill(DataSet11, "Persona")
' asignar dataset al datagrid
Me.DataGrid1.DataSource = DataSet11
Me.DataGrid1.DataMember = "Persona"
' configurar grid por código
Me.DataGrid1.Anchor = (AnchorStyles.Bottom + AnchorStyles.Left + AnchorStyles.Right + AnchorStyles.Top)
Me.DataGrid1.CaptionText = "Datos de personas"
Me.DataGrid1.CaptionBackColor = Color.Turquoise
Me.DataGrid1.CaptionForeColor = Color.Black
' crear un objeto para estilos del datagrid
Dim oEstiloGrid As New DataGridTableStyle
oEstiloGrid.MappingName = "Persona"
oEstiloGrid.BackColor = Color.LightGoldenrodYellow
oEstiloGrid.AlternatingBackColor = Color.Aquamarine
' crear objetos de columna-grid para cada
' columna de la tabla a mostrar en el datagrid
Dim oColGrid As DataGridTextBoxColumn
' configurar cada objeto de columna-grid
oColGrid = New DataGridTextBoxColumn
oColGrid.TextBox.Enabled = False
oColGrid.Alignment = HorizontalAlignment.Center
oColGrid.HeaderText = "Edad de la persona"
' nombre de la columna del dataset que
' se mapea hacia esta columna del grid
oColGrid.MappingName = "Edad"
oColGrid.Width = 50
oColGrid.Alignment = oColGrid.Alignment.Left
' añadir la columna al objeto que contiene
' los estilos del datagrid, en concreto,
' a la colección de estilos de columna
' aquí solo pongo uno de ejemplo
oEstiloGrid.GridColumnStyles.Add(oColGrid)
oColGrid = Nothing
' una vez creadas todas las columnas de
' estilos para el grid, añadir el objeto
' que contiene el estilo personalizado
' a la colección de estilos de tablas
' del datagrid
Me.DataGrid1.TableStyles.Add(oEstiloGrid)
Ahora tan solo me falta saber lo de que la sentencia SELECT te devuelva como máximo X tuplas.
Si alguien lo sabe le estaría muy agradecido si lo dijera.
Un saludo y gracias de nuevo :hola:
Navegación
Ir a la versión completa