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(http://prntscr.com/lx9n01) 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
:https://www.dotnetperls.com/split-vbnet
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
Solución simple y efectiva adaptada a tu escenario, mediante la clase TextFieldParser para parsear la cadena de texto en formato CSV:
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
He escrito una solución más genérica:
<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:
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...