none
COMO PUEDO INGRESAR DATOS EN 2 COLUMNAS ESPECIFICAS COMBOBOX EN UN DATAGRIDVIEW EN VB.NET RRS feed

  • Pregunta

  • Buen dia expertos tengo este codigo que me genera 2 combobox en en un datagridiew pero lo adiciona sin que las columna este determinadas(lo que esta con negrita lo adiciona no quiero que lo adicione).

    Public Class Form1
        Dim dv As DataView
        Dim ds As New DataSet
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim dt As New DataTable
            Dim strConn As String

            Dim da, daProducts As SqlDataAdapter
            Dim conn As SqlConnection
            strConn = "Data Source=AQP2-PC;Initial Catalog=NORTHWND;Integrated Security=True"
            conn = New SqlConnection(strConn)
            da = New SqlDataAdapter("Select * from Categories", conn)
            daProducts = New SqlDataAdapter("Select * from Products", conn)
            da.Fill(ds, "Categories")
            daProducts.Fill(ds, "Products")
            dt.Columns.Add("Category", GetType(Integer))
            dt.Columns.Add("Product")
            DataGridView1.AutoGenerateColumns = False
            DataGridView1.DataSource = dt

            Dim dgvCombo As New DataGridViewComboBoxColumn
            With dgvCombo
                .Width = 150
                .DataSource = ds.Tables("Categories")
                .DisplayMember = "CategoryName"
                .DataPropertyName = "CategoryID"
                .ValueMember = "CategoryID"
                .HeaderText = "Category"
            End With
            dv = New DataView(ds.Tables("Products"))
            DataGridView1.Columns.Add(dgvCombo)

            Dim dgvFilter As New DataGridViewComboBoxColumn
            With dgvFilter
                .Width = 150
                .DataSource = ds.Tables("Products")
                .DisplayMember = "ProductName"
                .DataPropertyName = "ProductName"
                .ValueMember = "ProductID"
                .HeaderText = "Product"
            End With
            DataGridView1.Columns.Add(dgvFilter)


        End Sub

        Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
            If e.ColumnIndex = 1 Then
                Dim dgvCbo As DataGridViewComboBoxCell = TryCast(DataGridView1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
                If dgvCbo IsNot Nothing Then
                    Dim str As String = DataGridView1.Item(0, DataGridView1.CurrentRow.Index).Value.ToString
                    dv = New DataView(ds.Tables("Products"))
                    dv.RowFilter = "CategoryID = " & str
                    dgvCbo.DataSource = dv
                End If
            End If
        End Sub

        Private Sub DataGridView1_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            If e.ColumnIndex = 2 Then
                Dim dgvCbo As DataGridViewComboBoxCell = TryCast(DataGridView1(e.ColumnIndex, e.RowIndex), DataGridViewComboBoxCell)
                If dgvCbo IsNot Nothing Then
                    dv = New DataView(ds.Tables("Products"))
                    dgvCbo.DataSource = dv
                End If
            End If
        End Sub

        Private Sub DataGridView1_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
            e.Cancel = True
        End Sub

        Private Sub DataGridView1_DefaultValuesNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowEventArgs) Handles DataGridView1.DefaultValuesNeeded
            e.Row.Cells(0).Value = 1
        End Sub

    End Class

    Pero lo que yo necesito es que mis combobox esten predeterminados en el datagriview, osea que en el datagridview este los 2 combobox, y como dije anteriormente no quiero que se adicione las columnas(si no que esas filas ya se encuentren en el datagridview)

    y bueno también aunque mi datagridview tiene el evento DefaultValuesNeeded para que salga el primer valor pero solo hace referencia a la primera columna y la primera fila yo necesito que cada fila que ingreso salga de por si el primer dato.

    De atemano gracias por su ayuda.


    viernes, 22 de junio de 2018 19:45

Respuestas

  • "mario gr" escribió:

    > tengo este codigo que me genera 2 combobox en en un datagridiew pero lo adiciona
    > sin que las columna este determinadas(lo que esta con negrita lo adiciona no
    > quiero que lo adicione).
    >

    Mario, te adiciona las columnas del tipo DataGridViewComboBoxColumn porque tú mismo así se lo estás diciendo que lo haga cuando ejecutas las líneas que en tu código aparecen en negrita:

        DataGridView1.Columns.Add(dgvCombo)
        DataGridView1.Columns.Add(dgvFilter)

    > Pero lo que yo necesito es que mis combobox esten predeterminados en el datagriview,
    > osea que en el datagridview este los 2 combobox, y como dije anteriormente no quiero
    > que se adicione las columnas(si no que esas filas ya se encuentren en el datagridview)

    Pues si es así, tendrás que dejar de añadir a tu control DataGridView las columnas en tiempo de ejecución y añadirlas en tiempo de diseño, incluidas aquellas del tipo DataGridViewComboBoxColumn que deseas utilizar.

    Mejor será que busques información al respecto, como por ejemplo, la que se muestra en el siguiente artículo, al que te remito para su lectura completa:

    [DataGridView] - Uso del DataGridViewComboBoxColumn


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    martes, 26 de junio de 2018 14:31
    Moderador