Alberti83 Posted March 7, 2013 Report Share Posted March 7, 2013 Saludos!Estoy haciendo un programa que al leer un archivo txt de ancho fijo (sin "," ni ";" o " " ")necesito que lo cargue en una grilla DataGridView pero solo e conseguido que cargue solo la primera linea con sus respectivas columnas, no se em ocurre hacer que cargue todo el txt utilizando Substring (x,y) para delimitar ya que solo en web indica con split pero no me sirve para lo que quiero mostrar. esto es lo que tengo, si algun senior de visual me salva. If TextBox1.Text = "" Then MsgBox("Debe Seleccionar Archivo", 0, "ERROR!!!") Else DataGridView1.Columns.Clear() DataGridView1.Columns.Add("ESTADO", "ESTADO") DataGridView1.Columns.Add("ENTRADA", "ENTRADA") DataGridView1.Columns.Add("RUT", "RUT") DataGridView1.Columns.Add("DV", "DV") DataGridView1.Columns.Add("PRODUCTO", "PRODUCTO") DataGridView1.Columns.Add("COD_PRODUCTO", "COD_PRODUCTO") DataGridView1.Columns.Add("COD_SUBPRODUCTO", "COD_SUBPRODUCTO") DataGridView1.Columns.Add("CAMPAA", "CAMPAA") DataGridView1.Columns.Add("VIGENCIA", "VIGENCIA") DataGridView1.Columns.Add("IMPORTE", "IMPORTE") Dim leer As New StreamReader(TextBox1.Text) Dim texto As String Dim lista As New List(Of String) Dim linea As String = Nothing Dim EST As String Dim ENTRADA As String Dim PRODUCTO As String Dim COD_PRODUCTO As String Dim COD_SUBPRODUCTO As String Dim CAMPAA As String Dim VIGENCIA As String Dim RUT As String Dim DV As String Dim IMPORTE As String texto = leer.ReadToEnd EST = texto.Substring(0, 1) ENTRADA = texto.Substring(1, 4) PRODUCTO = texto.Substring(24, 15) COD_PRODUCTO = texto.Substring(18, 2) COD_SUBPRODUCTO = texto.Substring(20, 4) CAMPAA = texto.Substring(47, 40) VIGENCIA = texto.Substring(88, 10) RUT = texto.Substring(8, 9) DV = texto.Substring(17, 1) IMPORTE = texto.Substring(101, 8) DataGridView1.Rows.Add(EST, ENTRADA, RUT, DV, PRODUCTO, COD_PRODUCTO, COD_SUBPRODUCTO, CAMPAA, VIGENCIA, IMPORTE) End If Link to comment Share on other sites More sharing options...
Ra Posted March 8, 2013 Report Share Posted March 8, 2013 Se mueve a Aplicaciones de Escritorio Link to comment Share on other sites More sharing options...
The Duke of Quakem Posted March 8, 2013 Report Share Posted March 8, 2013 Se supone que en una linea van todos los datos de la persona? Como diferencias entre uno y otro dato? podrías poner un ejemplo de los registros que estan dentro del archivo de texto para hacernos masomenos una idea de la situación en que estás... Link to comment Share on other sites More sharing options...
AshWilliams Posted March 8, 2013 Report Share Posted March 8, 2013 Podrías postear el contenido o algunas filas del txt a modo de ejemplo ;) Saludos :krider: Link to comment Share on other sites More sharing options...
The Duke of Quakem Posted March 9, 2013 Report Share Posted March 9, 2013 (edited) Viendo el código, ahora tranquilamente y con mas detalle, me asalta una duda: El datagridview es sólo un visualizador de datos, no es un repositorio de datos propiamente tal. No soy experto en VB.Net, pero supongo que la lógica es la misma que con C#, por lo que tienes que crear un objeto DataTable, crear las columnas de éste y ahí cargar los datos que estás leyendo con el streamreader, y finalmente enlazar el datatable con el datagridview para que este muestre los datos en el formulario. Es decir (en C#): DataTable tabla = new Datatable(); tabla.Colums.Add(new DataColumn("Entrada", typeof(string)); tabla.Colums.Add(new DataColumn("Producto", typeof(string)); ... ENTRADA = texto.Substring(1, 4); PRODUCTO = texto.Substring(24, 15); ... Tabla.Rows.Add(ENTRADA, PRODUCTO); DataGridView1.DataSource = tabla; DataGridView.DataBind(); //este paso depende de la versión de Visual Studio. Es lo único que se me ocurre que puede tener error en el código, porque hasta donde puedo ver, el streamreader y el resto del código asociado a la lectura del archivo de texto estarían correctos. Edited March 9, 2013 by The Duke of Quakem Link to comment Share on other sites More sharing options...
Alberti83 Posted March 14, 2013 Author Report Share Posted March 14, 2013 El txt es horrible: B0035R 00167605753686811OFERTA LINEA DE30250000OFERTA LINEA DE CREDITO LUCAS 02013-03-05UG0005500000000CLP2048000000000000000000000000000000000000000000000000000001 5151000900000000000000000000000000000000000000000000000350035PILOTO PILOTO 2004-02-18.00.00.000000000B0035R 00165531752686811OFERTA LINEA DE30357000OFERTA LINEA DE CREDITO LUCAS 02013-03-05UG0007500000000CLP2048000000000000000000000000000000000000000000000000000001 5151000900000000000000000000000000000000000000000000000350035PILOTO PILOTO 2004-02-18.00.00.000000000B0035R 00163888025686886NOMINA AGIL 99050048NOMINA AGIL 02013-03-05UG0050000000000CLP2048000000000000000000000000000000000000000000000000000001 5101000900000000000000000000000000000000000000000000000350035PILOTO PILOTO 2004-02-18.00.00.000000000 esas son 3 lineas de 800 mas jaja, logre mostrar todo con: Dim EST As String Dim ENTRADA As Single Dim PRODUCTO As String Dim COD_PRODUCTO As String Dim COD_SUBPRODUCTO As String Dim CAMPAA As String Dim VIGENCIA As String Dim RUT As Integer Dim DV As String Dim IMPORTE As Long If (TextBox1.Text <> "") Then DataGridView1.Columns.Clear() RESUMEN.Columns.Clear() DataGridView1.Columns.Add("EST", "ESTADO") DataGridView1.Columns.Add("ENTRADA", "ENTRADA") DataGridView1.Columns.Add("RUT", "RUT") DataGridView1.Columns.Add("DV", "DV") DataGridView1.Columns.Add("PRODUCTO", "PRODUCTO") DataGridView1.Columns.Add("COD_PRODUCTO", "COD_PRODUCTO") DataGridView1.Columns.Add("COD_SUBPRODUCTO", "COD_SUBPRODUCTO") DataGridView1.Columns.Add("CAMP", "CAMPAA") DataGridView1.Columns.Add("VIGENCIA", "VIGENCIA") DataGridView1.Columns.Add("IMPORTE", "IMPORTE") RESUMEN.Columns.Add("EST", "ESTADO") RESUMEN.Columns.Add("CAMP", "CAMPAA") Using leer As New StreamReader(TextBox1.Text) While Not leer.EndOfStream() Dim texto As String = leer.ReadLine EST = texto.Substring(0, 1) ENTRADA = texto.Substring(1, 4) PRODUCTO = texto.Substring(24, 15) COD_PRODUCTO = texto.Substring(18, 2) COD_SUBPRODUCTO = texto.Substring(20, 4) CAMPAA = texto.Substring(47, 40) VIGENCIA = texto.Substring(88, 10) RUT = texto.Substring(8, 9) DV = texto.Substring(17, 1) IMPORTE = texto.Substring(101, 8) DataGridView1.Rows.Add(EST, ENTRADA, RUT, DV, PRODUCTO, COD_PRODUCTO, COD_SUBPRODUCTO, CAMPAA, VIGENCIA, Format(IMPORTE, "$ ###,###,###.00")) End While End Using ElseIf MsgBox("Debe Seleccionar Archivo", 0, "ERROR!!!") Then End If Pero lo que me falta y no e podido pillar es hacer un resumen tb en Datagridview para copiarlo o exportarlo a un Excel despues, la idea es que agrupe todos los campos iguales de CAMPAÑA y sume su IMPORTE respectivo, trate con incorporandole un IF entre el recorrido If var(cont) <> CAMPAÑAThen RESUMEN.Rows.Add(EST, CAMPAÑA) var(cont) = CAMPAÑA cont = cont + 1 End If Pero el problema es que tira los campos aleatorio y no alfabeticamente por lo cual una campaña repetida puede estar al princio, al final o entremedio por lo cual se repetira. Es algo asi como GROUP BY de SQL server pero para Visual basic Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now