Buenas necesito ayuda como puedo enviar un RichTextBox a un datagridview en vb

Iniciado por fulltower, 20 Diciembre 2018, 04:27 AM

0 Miembros y 1 Visitante están viendo este tema.

fulltower

Buenas necesito ayuda como puedo enviar un RichTextBox a un datagridview, aqui dejo una imagen del RichTextBox la cual tiene  separador que es : "|" nombre | apellido| edad | estado civil , y esto sea enviado al  datagriview donde sea nombre  apellido edad y estado civil, espero me puedan ayudar con esto saludos un ejemplo:

en el RichTextBox:

maria | perez | 35años | casada
jose | lopes | 40años | divorciado
vanessa | fernandez | 20años | soltera
luis | gomez | 21años | soltero

En el datagridview:
datagrid.Columns.Add("nombre")
datagrid.Columns.Add("apellido")
datagrid.Columns.Add("edad")
datagrid.Columns.Add("estado civil")

que se agreguen al datagridview el dato del richtextbox

es en formato vb
           

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul2309

La mejor solución es que uses un recordset desconectado:

Option explicit
DIM RS as recordset

en el load
set RS = new recordset

private sub createRS()
rs.fields.apend "nombre", vbstr

luego creas una rutina para descargar los fragmentos de testo en el RS y por ultimo conectas el DBGRID al recorset

Eleкtro

#3
Solución simple y efectiva adaptada a tu escenario, mediante la clase TextFieldParser para parsear la cadena de texto en formato CSV:

Código (vbnet) [Seleccionar]
Dim dt As New DataTable("csv")
dt.Columns.Add("nombre")
dt.Columns.Add("apellido")
dt.Columns.Add("edad")
dt.Columns.Add("estado civil")

Using csvText As New StringReader(Me.RichTextBox1.Text),
     csvReader As New TextFieldParser(csvText) With {
         .Delimiters = {"|"c},
         .HasFieldsEnclosedInQuotes = False,
         .TextFieldType = FieldType.Delimited
     }

   Do Until csvReader.EndOfData
       Try
           Dim fields As String() = csvReader.ReadFields()
           dt.Rows.Add(fields)
       Catch ex As MalformedLineException
           Throw
       End Try
   Loop
End Using

Me.DataGridView1.DataSource = dt








Eleкtro

#4
He escrito una solución más genérica:

Código (vbnet) [Seleccionar]

<hidemodulename>
Public module TextFieldParserExtensions

''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Converts the source <see cref="TextFieldParser"/> to <see cref="DataTable"/>.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <param name="sender">
''' The source <see cref="TextFieldParser"/>.
''' </param>
'''
''' <param name="useFirstRowAsColumns">
''' If set to <see langword="True"/>, use the items of the first row of
''' the source <see cref="TextFieldParser"/> to create the columns of
''' the resulting <see cref="DataTable"/>.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The resulting <see cref="DataTable"/>.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function ToDataTable(ByVal sender As TextFieldParser, ByVal useFirstRowAsColumns As Boolean) As DataTable

   Dim dt As New DataTable() With {.CaseSensitive = False}
   Dim customColumnsCreated As Boolean
   Dim fields As String() = Nothing

   Do Until sender.EndOfData
       Try
           fields = sender.ReadFields()

       Catch ex As MalformedLineException
           Throw

       End Try

       If Not (customColumnsCreated) AndAlso (useFirstRowAsColumns) Then
           For Each field As String In fields
               dt.Columns.Add(field)
           Next field
           customColumnsCreated = True
           Continue Do
       End If

       Try
           dt.Rows.Add(fields)

       Catch ex As ArgumentException When Not (useFirstRowAsColumns) AndAlso (ex.HResult = -2147024809) ' Input array is longer than the number of columns in this table.
           For i As Integer = 0 To ((fields.Count - dt.Columns.Count) - 1)
               dt.Columns.Add()
           Next i
           dt.Rows.Add(fields)

       End Try

   Loop

   Return dt
End Function

end module


Modo de empleo:
Código (vbnet) [Seleccionar]
Dim csvTable As New DataTable()

Dim csvText As String =
   <csv>
        Name; Last Name; Age
        Michael; Johnson Phillips; 26
        William; Lee Williams; 34
        Susan; Parker Evans; 32
        Matilda; Garcia Martinez; 28
   </csv>.Value

Using csvReader As New StringReader(csvText),
     csvParser As New TextFieldParser(csvReader) With {
     .Delimiters = {";"c},
     .HasFieldsEnclosedInQuotes = False,
     .TextFieldType = FieldType.Delimited
}

   csvTable = TextFieldParserExtensions.ToDataTable(csvParser, useFirstRowAsColumns:=True)
End Using

Me.DataGridView1.DataSource = csvTable


PD: todo esto y mucho más en mi librería comercial DevCase para .NET Framework en la página de CodeCanyon.net...