none
utilizar un datagridview RRS feed

  • Pregunta

  • buenos dias antes que nada con respecto a mi proyecto, necesito ayuda, como puedo hacer para hacer q un registro de mi datagridview pueda enlazarme a otra datagridview donde se encontraran datos diferentes, aqui pongo una imagen donde explico como es!!!

    y lo que dice en la imagen es lo q quiero hacer pero con todos los departamentos!! q es lo q tngo q hacer estoy utilizando visual studio 2010 con base de datos access 2007


    Edilberto

    miércoles, 19 de diciembre de 2012 15:17

Todas las respuestas

  • hola lo resolveria de la siguiente manera:

    datagrid1 es los deptos y datagird2 es las categorias

    primero en mi evento del datagrid1 en su evento row header mouse clic pondria esto

    private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                nombre_depto = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
    
    // una vez teniendo el nombre harias otra consulta (te lo explicare en pseudo codigo
    // lo puedes poner en un datatble que te retorne las categorias de cada depto algo asi
    // aqui mandas a llamar al metodo y le asignas los datos al datagrid2
     dataGridView2.DataSource = damecategorias(nombre_depto);
    }
    
    //aqui recibirias el nombre del depto seleccionado
    public void datatable damecategorias(string departamento)
    {
    datatable dt1 = new datatable();
    dt1.clear();
    // en esta query mandarias el nombre del depto seleccionado
     string sql = "select categoria from departamento where nombre_depto = '"+departamento+"'";
    sqldatatadapter da = new sqldataadapter(sql,tuconexion);
    da.fill(dt1);
    return dt1;
    }


    declaras antes afuera la variable nombre depto como string, y seria todo, cualquies duda o alcaracion me dices, lo hice a mano asi que puede haber error de mayusculas o minusculas pero la idea esta, saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.


    miércoles, 19 de diciembre de 2012 16:47
  • aqui el unico problema es que el codigo yo lo quiero para visual studio 2010 y ese es para C# o visual basic.net

    Edilberto

    miércoles, 19 de diciembre de 2012 17:05
  • no entiendo? si estas trabajando con forms, debes de trabajar o con c++,vb o c#, no entiendo a que te refieres con que quieres el codigo en visual studio 2010, visual stuido 2012 es la herramienta para desarrollar, en que lenguaje desarrollas? saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 19 de diciembre de 2012 19:53
  • si tienes toda la razon mira yo estoy trabajando con vb ya que aqui no utilizo {}, 

    Edilberto

    miércoles, 19 de diciembre de 2012 20:04
  • Lo primero es utilizar en el datagriedview1 el evento CellContentClick

    Luego en la función que te genera el evento limpias el segundo datagridview (datagriedview2.Rows.Clear()) y haces una consulta de los datos fltrado por el código o llave de lo que seleccionaste del grid1, una vez obtenidos los resultados los guardar en una variable tipo row y los insertas en el grid como cuando cargas el primero y asunto arreglado


    • Editado MMolinaM miércoles, 19 de diciembre de 2012 20:57
    miércoles, 19 de diciembre de 2012 20:53
  • correcto amigo puedes entrar aqui convertir c# a vb para traducirlo, de todos modos aqui te dejo el codigo (no soy muy diestro en vb)

    Private Sub dataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs)
                nombre_depto = dataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString()
    ' una vez teniendo el nombre harias otra consulta (te lo explicare en pseudo codigo
    ' lo puedes poner en un datatble que te retorne las categorias de cada depto algo asi
    ' aqui mandas a llamar al metodo y le asignas los datos al datagrid2
     dataGridView2.DataSource = damecategorias(nombre_depto)
     End Sub
    
    'aqui recibirias el nombre del depto seleccionado
    Public Sub datatable damecategorias(departamento As String)
    Dim dt1 As New datatable()
    dt1.clear()
    ' en esta query mandarias el nombre del depto seleccionado
     Dim sql As String = "select categoria from departamento where nombre_depto = '" & departamento & "'"
    Dim da As sqldatatadapter = new sqldataadapter(sql,tuconexion)
    da.fill(dt1)
    Return dt1
    End Sub
    cualquier detalle seria minimo, si mis respuestas te sirvieron marcalas como utiles, o como respuesgta de esta manera ayudas a la comunidad :), saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 19 de diciembre de 2012 21:18
  • Pues mira yo agrego las tablas con el datagridview y pues al agregarlos con el datagridview se agregan automaticamente el dataset, data table, Binding source. Como se muesta en la imagen de abajo

    ahora muestro el codigo fuente que tengo asta el momento

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim cnn As New OleDb.OleDbConnection
            Dim dt As New DataTable
            Dim da As New OleDb.OleDbDataAdapter
            Dim cmd As New OleDb.OleDbCommand
    
            ' abro la conexion
            cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Deptos.accdb;Persist Security Info=False"
            cnn.Open()
    
            ' creo el comando y lo lleno con la tabla empleados
            cmd.Connection = cnn
            cmd.CommandText = "Depto"
            cmd.CommandType = CommandType.TableDirect
            da.SelectCommand = cmd
            da.Fill(dt)
            'Me.DataGridView1.DataSource = dt
            'TODO: This line of code loads data into the 'DeptosDataSet1.Categorias' table. You can move, or remove it, as needed.
            Me.CategoriasTableAdapter.Fill(Me.DeptosDataSet1.Categorias)
            'TODO: This line of code loads data into the 'DeptosDataSet.Depto' table. You can move, or remove it, as needed.
            Me.DeptoTableAdapter.Fill(Me.DeptosDataSet.Depto)
            Timer1.Start()
        End Sub
    
        Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs)
            'aqui quiero ordenar la columna de IdDepto para que se orden automaticamente 
            Static orden As Integer = 1
    
            If DataGridView1.Rows.Count > 0 Then
                If DataGridView1.Columns(e.ColumnIndex).Name = "Depto" Then
                    If orden = 1 Then
                        DataGridView1.Sort(New ordenarcolumna(SortOrder.Ascending,
                        e.ColumnIndex))
                        orden = 0
                    Else
                        DataGridView1.Sort(New ordenarcolumna(SortOrder.Descending,
                        e.ColumnIndex))
                        orden = 1
                    End If
                End If
            End If
        End Sub
    
        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
            ' Carácter tecleado
            ' Codigo donde solo puedo ingresar numero y el guion, todo depende del numero de nomina.
            Dim c As Char = e.KeyChar
    
            If Not Char.IsDigit(c) Then
                Select Case c
                    Case "-"c
                        ' Sin implementación
                    Case Chr(8)
                        ' Tecla retroceso
                        'te manda el mensaje que debes de teclear bien el numero de nomina del trabajador.
                    Case Else
                        e.Handled = True
                        MessageBox.Show("Ingrese Num-Nomina Correctamente", "Registro Trabajador", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        TextBox1.Clear()
                End Select
            End If
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Label2.Text = TimeOfDay.TimeOfDay.ToString
    
        End Sub
    End Class
    
    Public Class ordenarcolumna
        'es lo mismo del codigo para ordenar columna
        Implements System.Collections.IComparer
    
        Private sortorderModifier As Integer = 1
        Private col As Integer = 0
    
        Public Sub New(ByVal sortorder As SortOrder, ByVal columna As Integer)
            col = columna
            If sortorder = sortorder.Descending Then
                sortorderModifier = -1
            ElseIf sortorder = sortorder.Ascending Then
                sortorder = 1
            End If
        End Sub
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
            Implements System.Collections.IComparer.Compare
    
            Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
            Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)
            Return (Math.Sign(CLng(DataGridViewRow1.Cells(col).Value) -
                              CLng(DataGridViewRow2.Cells(col).Value))) * sortorderModifier
        End Function
    
    End Class
    



    Edilberto

    jueves, 20 de diciembre de 2012 14:35
  • ok, llena tu datagrid1 como lo estas llenando ahora, pero a la hora de traer las categorias seleccionadas, llenalo con el codigo que te puse,

    cuando se cargue tu datagrid1 el datagrid2 (categorias) va a estar vacio hasta que el usuario de clic en un depto se llenaran los datos del datagrid 2

    Private Sub dataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs)
                nombre_depto = dataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString()
    ' una vez teniendo el nombre harias otra consulta (te lo explicare en pseudo codigo
    ' lo puedes poner en un datatble que te retorne las categorias de cada depto algo asi
    ' aqui mandas a llamar al metodo y le asignas los datos al datagrid2
     dataGridView2.DataSource = damecategorias(nombre_depto)
     End Sub
    
    'aqui recibirias el nombre del depto seleccionado
    Public Sub datatable damecategorias(departamento As String)
    Dim dt1 As New datatable()
    dt1.clear()
    ' en esta query mandarias el nombre del depto seleccionado
     Dim sql As String = "select categoria from departamento where nombre_depto = '" & departamento & "'"
    Dim da As sqldatatadapter = new sqldataadapter(sql,tuconexion)
    da.fill(dt1)
    Return dt1
    End Sub


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    jueves, 20 de diciembre de 2012 20:32
  • lo que no entiendo es que si debo de tener en la base de datos una tabla donde esten todos los departamentos y otra tabla donde esten todas las categorias ó hago una tabla para cada departamento!!!!

    Edilberto

    martes, 8 de enero de 2013 15:32
  • pues no se como esten hechas tus tablas y sus relaciones, seria bueno que nos lo proporcionaras, la logica va asi

    tabla depto

    id depto

    nombre depto

    etc

    -----------

    tabla categoria

    id categoria

    nombrecategoria

    fk_id_departamento (llave foranea de departamento)

    luego creas tu consulta en el ejemplo que te puse seria:

    select id_categoria, categoria from categoria inner join depto on depto.id_depto = categoria.id_depto
    where depto.nombre = 'caballero' 
    me explique?, postea como estan tus tablas para ayudarte mejor, saludos

    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    martes, 8 de enero de 2013 19:17
  • mira tengo algo parecido nada mas que yo tengo otra tabla que se llama informacion 

    estas son mi relaciones donde la tabla categoria se relaciona con la tabla departamento, y la de departamento con informacion, pero pues no se si estoy bien 


    Edilberto

    martes, 8 de enero de 2013 21:48
  • correcto entonces es como te habia dicho (la forma de hacer el procedimiento para que te muestre los datos en el datagrid view) lo unico que cambia es la consulta que seria asi:

    Private Sub dataGridView1_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) nombre_depto = dataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString() ' una vez teniendo el nombre harias otra consulta (te lo explicare en pseudo codigo ' lo puedes poner en un datatble que te retorne las categorias de cada depto algo asi ' aqui mandas a llamar al metodo y le asignas los datos al datagrid2 dataGridView2.DataSource = damecategorias(nombre_depto) End Sub 'aqui recibirias el nombre del depto seleccionado Public Sub datatable damecategorias(departamento As String) Dim dt1 As New datatable() dt1.clear() ' en esta query mandarias el nombre del depto seleccionado Dim sql As String = "select categorias.idcategoria,categorias.

    categoria from categorias inner join departamento on categorias.idcategoria = departamento.categoria where departamento.depto  = '" & departamento & "'" Dim da As sqldatatadapter = new sqldataadapter(sql,tuconexion) da.fill(dt1) Return dt1


    otra cosa, en tu relacion es

    un departamento tiene  categorias?

    o las categorias tienen un departameno?

    por que como lo veo, no lo veo bien, saludos


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.


    martes, 8 de enero de 2013 22:14
  • mi relacion es un departamento tiene categorias!!!

    Edilberto

    martes, 8 de enero de 2013 22:56
  • entonces tu relacion deberia ser

    tabla depto

    id (pk)

    depto

    ---------------------

    tabla categorias

    id (pk)

    categorias

    depto_id (fk)

    ---------------

    tu hiciste la bd, o ya te la dieron asi?, saludos


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 9 de enero de 2013 14:59
  • pues es un proyecto que tengo q hacer y pues todo lo estoy empezando desde cero y pues lo tengo q entregar en febrero mas tardar y no se si puedas seguir ayudandome en esto te lo agradeceria mucho..

    pues la bd la estoy haciendo yo asi como are tambien la aplicacion que te mostre!!!


    Edilberto

    miércoles, 9 de enero de 2013 15:03
  • ok, entonces esta mal tu relacion depto-categorias deberia ser como te la mostre, pero la tienes al revez o por lo menos yo no puedo entender como va la relacion asi, deberias hechar uyn vistazo normalizacion de base de datos saludos.


    si mi respuesta te ayudo votala como util, si resolvio tu duda marcala como respuesta, de esta manera ayudas a otros compañeros que tengan dudas similares.

    miércoles, 9 de enero de 2013 18:07