none
Como Insertar nuevas filas en mi DataGrid

    שאלה

  • Hola a todos,

    Tengo un DataGrid en mi Windows Form, con cuatro columnas.

    Lo he rellenado desde una Tabala SQL y muestro el resultado al usuario del DataGrid.

    Ahora, el usuario deberia insertar nuevos datos en el DataGrid pero al posicionarse con el cursor en el ultimo registro, al darle ENTER o Tabulacion para que se abra una nueva linea, el DataGrid no genera una nueva linea.

    Alguien me puede informar como hacer esto en mi desarrollo VB.NET.

    Sin mas y a la espera de noticias vuestra, recibid un cordial saludo.

    mIGUEL

    יום רביעי 13 יוני 2012 09:30

תשובות

  • Creo que la mejor forma es trabajar directamente con una tabla, creo que es la mas correcta:

        Public Shared Function ConsultarAlbaran(ByVal Documento As String) As DataTable
    
            Dim sql As String = "SELECT [campo1], [campo2] FROM Tabla"
    
            Dim RSDataAdapter As New SqlDataAdapter(sql, Conexion)
    
            Dim RSDataTable As New DataTable
            RSDataAdapter.Fill(RSDataTable)
    
            Return RSDataTable
    
        End Function

    • נערך על-ידי ToniAG יום רביעי 13 יוני 2012 16:09
    • סומן כתשובה על-ידי MiguelVB יום חמישי 14 יוני 2012 08:21
    יום רביעי 13 יוני 2012 16:04
  • Podrias utilizar  RSDataTable.rows.count
    • סומן כתשובה על-ידי MiguelVB יום שני 18 יוני 2012 15:16
    יום חמישי 14 יוני 2012 12:33

כל התגובות

  • Hola, pon a True la propiedad .AllowUserToAddRows del DataGridView.


    Saludos, Javier J

    יום רביעי 13 יוני 2012 09:39
  • Hola Javier,

    Ya lo tengo puesto y aún así, no me hace nada al pulsa ENTER o Tabulacion.

    Que máss puede ser.

    Saludos.

    יום רביעי 13 יוני 2012 09:48
  • Este es el codógio que tengo:

     Private Sub ModificarValidado()
            Vdoc = TxtAlbaran.Text
            ColSarcValidados = CSarcValidados.ConsultarAlbaran(Vdoc)
            grdLineas.AutoGenerateColumns = False
            grdLineas.DataSource = ColSarcValidados
            grdLineas.AllowUserToAddRows = True
            ButSSCC.Visible = True
            TxtSSCC.Visible = False
            TxtSSCC.Text = ""
            TxtSSCC.Focus()
            TxtAlbaran.ReadOnly = True
            ButAceptarSSCC.Visible = False
            ButValidar.Visible = True
            ButSalir.Visible = True
            grdLineas.Visible = True
    
            BtnNuevoAlbaran.Visible = True
    
            Ini = 1
        End Sub

    יום רביעי 13 יוני 2012 09:50
  • Hola

    Pon un punto de interrupción, para haber si lee las lineas o salta por un error, ¿el DataGrid que comentas es un DataGridView?

    יום רביעי 13 יוני 2012 10:06
  • Hola Toni,

    No sale por error, esta controlado, pues al mostrar toda la pantalla con el DataGridView y los botones de envios, sale todo bien.

    La pantalla que se muestra es la sigueinte:

    Para seguir el proceso, el usuario tiene que pulsar uno de los botones existentes en la pantalla.

    Lo que necesito es que estando situado el usuario en la ultima linea, pulse ENTER o cualquier otra tecla para que se abra una nueva linea en el DtaGridView.

    Espero noticias.

    Saludos.

    Miguel

    יום רביעי 13 יוני 2012 10:21
  • Pero si tienes AllowUserToAddRows = True la linea nueva siempre esta visible, estes en la ultima o la primera
    יום רביעי 13 יוני 2012 10:29
  • Pues como puedes ver en el codigo, esta en True y no se activa ni al principio ni al final.

    Algo me debe de faltar, entiendo Yo.

    A ver si se os puede ocurrir algo, pues se me escapa a mi conocimiento.

    Saludos y gracias.

    Miguel

    יום רביעי 13 יוני 2012 10:34
  • Y la conexión como la tienes, puede ser que solo sea de lectura, por eso no te deja insertar nuevas lineas
    יום רביעי 13 יוני 2012 10:34
  • Como se indica eso?

    יום רביעי 13 יוני 2012 11:53
  • Puedes poner como tienes ConsultarAlbaran haber si es el causante
    יום רביעי 13 יוני 2012 13:28
  • Este es el código de la llamada de Consultar Albaran

     Public Shared Function ConsultarAlbaran(ByVal Documento As String) As List(Of CSalesLineNav)
            Dim ColLineas As New List(Of CSalesLineNav)
            Dim BDSql As String = ""
            Dim Conexion = CConexionLocal.Conectar(BDSql)
            'Dim Conexion As SqlConnection = DirectCast(CConexionLocal.Conectar(BDSql, SqlConnection)
            Conexion.Open()
            Dim Comando As New SqlCommand
            Comando.Connection = CType(Conexion, SqlConnection)
            Dim SqlStr As String
            ' Aquí se recogen todos los registros mientras 1=1
            SqlStr = "Select [Document Type], [Document No_], [Line No_], [Sell-to Customer No_], Type, No_, [Shipment Date], Quantity from dbo.[Repuestos Menendez$Sales Line] where [Document No_] = '" & Documento & "'"
            ' Metemos en el texto del comando el AS STRING de la orden del Select
            Comando.CommandText = SqlStr
    
            ' Para devolver datos hay que utilizar un objeto DataReader
            Dim Lector As SqlDataReader
            Lector = Comando.ExecuteReader
            Do While Lector.Read()
                Try
                    Dim VConfigMail As New CSalesLineNav(CInt(Lector("Document Type")), CStr(Lector("Document No_")), CInt(Lector("Line No_")), CStr(Lector("Sell-to Customer No_")), CInt(Lector("Type")), CStr(Lector("No_")), CDate(Lector("Shipment Date")), CDec(Lector("Quantity")))
                    '***********************************************************************
                    '**** Antes de la lectura de todos los campos deberiamos verificar
                    '**** que los campos no tienen valor Null con las instrucciones 
                    '**** que se definen más abajo en comentarios
                    '***********************************************************************
                    'If (Not VConfigMail Is DBNull.Value) Then
    
                    '    ' Convertirmos el valor a Integer
                    '    '
                    '    Dim docType As Integer = CInt(VConfigMail)
    
                    'Else
                    '    ' El valor es NULL; no se puede convertir a Integer
    
                    'End If
                    ColLineas.Add(VConfigMail)
                Catch ex As IndexOutOfRangeException
                    MsgBox("IndexOut of Range Caught" & vbCrLf & ex.Message)
                End Try
    
            Loop
            Lector.Close()
            Conexion.Close()
            Return ColLineas
        End Function

    Saludos

    יום רביעי 13 יוני 2012 14:40
  • Hola

    El problema es que enlazas el datagridview con una lista de objetos, por este motivo no te dejar insertar nuevos registros

    יום רביעי 13 יוני 2012 15:48
  • Y como salgo de esta?

    Saludos.

    יום רביעי 13 יוני 2012 15:52
  • Creo que la mejor forma es trabajar directamente con una tabla, creo que es la mas correcta:

        Public Shared Function ConsultarAlbaran(ByVal Documento As String) As DataTable
    
            Dim sql As String = "SELECT [campo1], [campo2] FROM Tabla"
    
            Dim RSDataAdapter As New SqlDataAdapter(sql, Conexion)
    
            Dim RSDataTable As New DataTable
            RSDataAdapter.Fill(RSDataTable)
    
            Return RSDataTable
    
        End Function

    • נערך על-ידי ToniAG יום רביעי 13 יוני 2012 16:09
    • סומן כתשובה על-ידי MiguelVB יום חמישי 14 יוני 2012 08:21
    יום רביעי 13 יוני 2012 16:04
  • Hola Toni,

    Ya he realizado el cambio y ahora, como nunca he trabajado por ahora con datatable, no sé como tratarla en el proceso una vez devuelta en la funcion.

    Quiero saber si tiene datos o no. Como se hace esto?

    Yo pongo if RSDataTable.count > 0 y me da error porque dice que no se puede utilizar así.

    Si puedes guiarme un poco te lo agradecería.

    Saludos.

    Miguel

    יום חמישי 14 יוני 2012 07:32
  • Podrias utilizar  RSDataTable.rows.count
    • סומן כתשובה על-ידי MiguelVB יום שני 18 יוני 2012 15:16
    יום חמישי 14 יוני 2012 12:33