none
String a listview RRS feed

  • Pregunta

  • Estimados expertos del foro, 

    Ante todo, agradecer por adelantado cualquier ayuda prestada para solucionar el problema que tengo.

    Estoy desarrollando una pequeña aplicación que realiza consultas SQL a una Base de Datos HANA (de SAP). Mi aplicación se apoya en el software PLINK.exe para poner hacer la sesión ssh contra el sistema donde se aloja la Base de Datos y recupero la respuesta en un string.

    La función que uso para rellenar el ListView es así:

    Process ParentProcess = new Process();

    ProcessStartInfo ChildProcess = new ProcessStartInfo();

    ChildProcess.FileName = "C:\\KeePass\\plink.exe";

    ChildProcess.Arguments = ARGumento;

    ChildProcess.RedirectStandardOutput = true;

    ChildProcess.WindowStyle = ProcessWindowStyle.Hidden;

    ChildProcess.CreateNoWindow = true;

    ChildProcess.UseShellExecute = false;

    ParentProcess.StartInfo = ChildProcess;

    ParentProcess.Start();

    StreamReader readerLines = ParentProcess.StandardOutput;

     

               

    -------------------------

    A partir de aquí lo que hago es parsear la salida de la consulta que viene en este formato:

    CHID,DESCRIPTION,HOST,VALUE,EXPECTED_VALUE,C,SAP_NOTE "   10","Analysis date","","2016/08/02 13:11:47 (CEST)","","","" "   11","Database name","","AUD","","","" "  110","Everything started","","yes","yes",""," 2177064" "  111","Host startup time variation (s)","","0","<= 600",""," 2177064"

     

    Uso estas funciones para tratar de rellenar el texto correcto dentro de cada campo del ListView:

     

    string Salida = readerLines.ReadToEnd();

    string SalidaSinRetorno = Salida.Replace("\r\n", string.Empty);

    string SalidaSinDobleComilla = SalidaSinRetorno.Replace("\" ", ",");

    string SalidaFinal = SalidaSinDobleComilla;

    string[] sSizes = SalidaFinal.Split(',');

     

     

    Y ahora trato de rellenar el ListView de la siguiente forma:

     

    sSizes = sSizes.Where(x => !string.IsNullOrEmpty(x)).ToArray();

    string[] TableItem = new string[NColumnas]; for (int i = 0; i < 10; i++)

    {

            int posi1 = 0+i;

            int posi2 = 1+i;

            int posi3 = 2+i;

            int posi4 = 3+i;

            int posi5 = 4+i;

            int posi6 = 5+i;

            int posi7 = 6 + i;

            ListViewItem item;

            TableItem[0] = sSizes[posi1].ToString();

            TableItem[1] = sSizes[posi2].ToString();

            TableItem[2] = sSizes[posi3].ToString();

            TableItem[3] = sSizes[posi4].ToString();

            TableItem[4] = sSizes[posi5].ToString();

            TableItem[5] = sSizes[posi6].ToString();

            TableItem[6] = sSizes[posi7].ToString();

            item = new ListViewItem(TableItem);

            lvHealthCheck.Items.Add(item);

    }

    Por algún motivo que no consigo entender (lo cierto es que soy muy muy novato) la salida en el ListView no es como espero. La salida en el ListView es esta:

    https://1drv.ms/i/s!AlRQKXtdOa3HkzPw0pj3fv9Vcxgq

    Así es como me gustaría que apareciese:

    https://1drv.ms/i/s!AlRQKXtdOa3HkzLPz0gaij5crtgY

    Por favor, ¿serían tan amables de ayudarme a solucionar mi problema y entender que estoy haciendo mal?

     

    Les envío un millón de gracias

    Un cordial saludo


    martes, 2 de agosto de 2016 11:38

Respuestas

  • hola

    Si quieres visualizar las lineas de cada celda porque no usas el DataGridView ?

    con este tendras el concepto de rows y columns, por eso las celdas apareceran bien delimitadas

    es mas podrias asignar el DataSource del control asignandole un List<>

    recomendaria uses librerias como ser

    http://www.filehelpers.net/

    si vas a parsear un archivo separado por comas, de esta forma mapeas cada dato con propeidades de una clase que luego puedes asignar directo al control

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Maxusete jueves, 4 de agosto de 2016 15:24
    martes, 2 de agosto de 2016 13:03

Todas las respuestas

  • hola

    Si quieres visualizar las lineas de cada celda porque no usas el DataGridView ?

    con este tendras el concepto de rows y columns, por eso las celdas apareceran bien delimitadas

    es mas podrias asignar el DataSource del control asignandole un List<>

    recomendaria uses librerias como ser

    http://www.filehelpers.net/

    si vas a parsear un archivo separado por comas, de esta forma mapeas cada dato con propeidades de una clase que luego puedes asignar directo al control

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Maxusete jueves, 4 de agosto de 2016 15:24
    martes, 2 de agosto de 2016 13:03
  • Hola Leandro, 

    Muchisimas gracias por la solucion. He usado el driver para poder conectar y puedo parsear toda la consulta en este componente.

    Saludos

    jueves, 4 de agosto de 2016 15:24