[C con Clase] Problema con control Listview

Steven R. Davidson vze266ft en verizon.net
Mar Feb 12 05:38:05 CET 2008


Hola Kyosuke,

Kyosuke Kasuga wrote:

> Hi!!!, yo molestando de nuevo, bueno mi problema es que estoy usando
> por primera vez un control ListView, pero no logro hacer k me funcione,
> he logrado hacer k me ingrese un codigo, pero no 2 columnas como kiero,
> ademas me ingresa una columna cuando se le da la gana, la verdad no
> entiendo del todo bien como funciona este control, yo lo que necesito es
> que me guarde los resultados de una consulta en MySQL en el control
> ListView en 2 columnas y varias filas, cualkier ayuda o sugerencia será
> bien recibida, de antemano muchas gracias.  Les dejo el codigo de lo k he
> hecho hasta el momento, estoy haciendo el programa en Dev-C++ en Win
> XP.
>   

Veamos el código.

>   bool BuscarList(HWND hwnd, char *maquina, char *usuario, char *clave,
> char *dato, char *Plantilla, int IDC)
> {

[CORTE]

>      for (i=0;i<total; ++i){
>         Campos = mysql_fetch_row(respuesta);
>        
>         strcpy(muestra[0],Campos[0]);
>         strcpy(muestra[1],Campos[1]);
>                    
>         Item.iItem = i;
>         Item.iImage = i;
>         Item.iSubItem = 0;
>         Item.lParam = (LPARAM) &muestra;
>         Item.pszText = LPSTR_TEXTCALLBACK;
>        

Como dije en un mensaje anterior, esto no funcionará para lo que 
quieres, porque tu ventana principal no tiene acceso a la información de 
la base de datos. La información está aquí, en esta función. Deberías 
asignar los arrays al puntero. Esto es,

Item.pszText = muestra[0];

>         ListView_SetItemText(GetDlgItem(hwnd, IDC), i, 0, muestra[0]);
>         ListView_SetItemText(GetDlgItem(hwnd, IDC), i, 1, muestra[1]);
>        
>         SendDlgItemMessage( hwnd, IDC, LVM_INSERTITEM, 0, (LPARAM)&Item
> );
>        

Esto no tiene sentido, ya que no has insertado aún el ítem. Tienes que 
agregar el ítem (principal) antes de poder insertar los subítems, que en 
tu caso son las columnas.

Al final, deberías tener este código:

HWND hlv = GetDlgItem( hwnd, IDC );
...
for( ... )
{
   Item.pszText = muestra[0];

   // SendDlgItemMessage( hwnd, IDC, LVM_INSERTITEM, 0, (LPARAM)&Item );
   ListView_SetItem( hlv, &Item );

   ListView_SetItemText( hlv, i, 1, muestra[1] );
}

>         sprintf(Mensaje, "Dato : %s", Campos[1]);
>         MessageBox (hwnd, Mensaje, "Chanchichó", MB_ICONEXCLAMATION);
>      }
>      mysql_free_result(respuesta);
>   }
>   else{
>       delete[] Consulta;
>       mysql_close(MisDatos);
>       return false;
>   }

Las sentencias anteriores en el apartado 'else' no son necesarias, 
porque son exactamente iguales a las sentencias que vas a ejecutar 
irrelevantemente de la veracidad de la expresión de la sentencia 'if'.

>   delete[] Consulta;
>   mysql_close(MisDatos);
>   return true;
> }




Steven







Más información sobre la lista de distribución Cconclase