none
Problema al insertar un elemento a una tabla. CListCtrl RRS feed

  • Pregunta

  • Hola!

    La cuestión es que utilizo una tabla para mostrar resultados. Esa tabla la he generado a partir de un CListCtrl insertando un elemento de este tipo en un diálogo.

    La variable m_tabla es la variable asociada con el CListCtrl.

    Le asocio 6 columnas del siguiente modo. 

     

    m_tabla.InsertColumn(0, _T("Núm."), LVCFMT_CENTER, 50);

    m_tabla.InsertColumn(1, _T("Fecha y Hora"), LVCFMT_CENTER, 140);

    m_tabla.InsertColumn(2, _T("Campo 2"), LVCFMT_CENTER, 80);

    m_tabla.InsertColumn(3, _T("Campo 3"), LVCFMT_CENTER, 30);

    m_tabla.InsertColumn(4, _T("Cod. Pais"), LVCFMT_CENTER, 80);

    m_tabla.InsertColumn(5, _T("Cod. Identificación"), LVCFMT_CENTER, 150);

     

    Ahora para introducir un elemento el la tabla hago lo siguiente:

     

    ptrDlg->m_tabla.InsertItem(0,linea.Mid(3,3));

    ptrDlg->m_tabla.SetItemText(0, 1, fecha);

    ptrDlg->m_tabla.SetItemText(0, 2, linea.Mid(7,5));

    ptrDlg->m_tabla.SetItemText(0, 3, linea.Mid(13,1));

    ptrDlg->m_tabla.SetItemText(0, 4, linea.Mid(15,3));

    ptrDlg->m_tabla.SetItemText(0, 5, linea.Mid(19,12));

     

    Lo de ptrDlg es un puntero al diálogo donde esta la tabla, ya que esto lo hago en otro diálogo. La variable linea es de tipo CString,  es decir,  contiene texto que muestro en cada una de las columnas.

     

    El problema es que cuando ejecuto el programa al ejecutarse la primera instrucción

     

    ptrDlg->m_tabla.InsertItem(0,linea.Mid(3,3));

     

    me sale un diálogo emergente,  como los de alertas de windows que me dice:

     

    Error: 'Column count doesn´t match value count at row 1' 

     

    No entiendo porqué este error.

     

    Gracias de antemano por la ayuda..

    jueves, 29 de enero de 2009 12:28

Todas las respuestas

  • Pues me dejas un poco estupefacto porque no debería fallarte en esa línea... pero viendo el código, y suponiendo que después de aceptar el cuadro de aviso, el depurador se te quede en la línea que citas, el error está en la anterior.

    ¿Qué es "fecha"?

    Cuando el debugger se interrumpe en algún lado, te muestra la línea siguiente a la ejecutada porque el puntero de programa siempre va por delante en una instrucción...
    domingo, 1 de febrero de 2009 16:04
    Moderador
  • Al parecer el problema esta con la variable fecha, ¿es una variable de texto?, ahora que si es así, debes verificar que tu contador de fila se incremente. Esto es el primer parametro es la fila que empieza en 0. En la instrucción InsertItem el primer parametro es el número de fila a crear o insertar (empezando en 0 siempre, ahora que si no es asi lo que puedes hacer es antes de invocar tu función es ptrDlg->m_tabla.DeleteAllItems();, el segundo parametro es la cadena de texto. Ahora lo que yo te recomiendo es lo siguiente:
    ....
    ptrDlg->m_tabla.DeteleAllItems();
    int i = 0;

    ptrDlg->m_tabla.InsertItem(i,linea.Mid(3,3));

    //si fecha es una variable de tipo CString o de texto no hay problema

    //en caso contrario si es de tipo CTime lo que puedes hacer es lo siguiente

    //fecha.Format("%d-%m-%Y");, esto te devuelve la fecha de tipo dd-mm-aaaa, en una cadena de texto

    //ptrDlg->m_tabla.SetItemText(i,1, fecha.Format("%d %m %Y"));

    ptrDlg->m_tabla.SetItemText(i, 1, fecha);

    ptrDlg->m_tabla.SetItemText(i, 2, linea.Mid(7,5));

    ptrDlg->m_tabla.SetItemText(i, 3, linea.Mid(13,1));

    ptrDlg->m_tabla.SetItemText(i, 4, linea.Mid(15,3));

    ptrDlg->m_tabla.SetItemText(i, 5, linea.Mid(19,12));

    i++;

    ...
    Espero te sea de ayuda
    miércoles, 23 de septiembre de 2009 3:06