Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cargar lista simple dentro de stringgrid (https://www.clubdelphi.com/foros/showthread.php?t=86208)

Neg90 01-07-2014 01:02:14

Cargar lista simple dentro de stringgrid
 
Buenas tengo que pedirles ayuda a ver si alguien se da cuenta donde esta el error, ya hace rato que trato de solucionarlo y me cerré, tengo que desde una lista de números, (ISBN, este es un numero de una tabla Libro), hago una consulta sql y traigo datos, los cuales cargo en un stringGrid, y necesito hacer un botón "refrescar" lo que hace es borrar todo el stringGrid y cargar los datos que traigo del Query . Ahora el problema en si, si hago click en "refrescar" por ejemplo teniendo 4 Libros cargados en la lista y en el stringGrid, cuando vuelve a cargarlos solo me carga los 3 últimos, debo estar usando mal algo en stringGrid ya no me doy cuenta. No estoy pidiendo que nadie me resuelva el problema , y también aclaro que no es un programa que yo este vendiendo, eso solo un trabajo que estamos haciendo para la universidad . Muchas gracias.

Código Delphi [-]
procedure TFormCatalogoLibros.SpeedButton8Click(Sender: TObject);
var
  cont1,cont,i:integer;
  aux:Lista;
begin

    Carrito.SQL.Text:='Select * From Libro where (ISBN =:Dato)'; //consulta de donde saco los datos
    //Borrar todo  de stringGrid
    for cont :=0 to Stringgrid1.colcount-1 do
        for cont1 :=0 to stringgrid1.rowcount-1 do
            stringgrid1.Cells[cont,cont1] := '';
        StringGrid1.Rowcount:=1;
    //Cargo nuevamente el stringGrid con datos de la lista
    Aux:=L; //L es la lista original que contiene los numeros , la paso a aux por si las dudas nada mas.
    while (Aux <> Nil) do begin
      Carrito.close;
      Carrito.Parameters.ParamByName('Dato').Value:=aux.Datos;
      Carrito.Active:=True;
      Carrito.Open;
      StringGrid1.Cells[0,StringGrid1.Row]:=Carrito.FieldByName('ISBN').AsString ;
      StringGrid1.Cells[1,StringGrid1.Row]:=Carrito.FieldByName('Titulo').AsString ;
      StringGrid1.Cells[2,StringGrid1.Row]:=Carrito.FieldByName('Autor').AsString;
      StringGrid1.Cells[3,StringGrid1.Row]:=Carrito.FieldByName('Editorial').AsString;
      StringGrid1.Cells[4,StringGrid1.Row]:=CurrToStr(Carrito.FieldByName('Precio').AsCurrency);
      StringGrid1.Row:=StringGrid1.Rowcount - 1;
      //Agranda la tabla con una fila mas
      with StringGrid1 do         
        begin       
          RowCount := RowCount +1;
          for i:= RowCount - 1 downto StringGrid1.Rowcount - 1 do
            Rows[i]:= Rows[i-1];
            Rows[StringGrid1.Rowcount - 1].Clear;
          end;
      Aux:=Aux^.sig;
    end;

end;

ecfisa 01-07-2014 04:26:41

Hola Neg90.

Según lo que te entendí, haría:
Código Delphi [-]
procedure TFormCatalogoLibros.SpeedButton0Click(Sender: TObject);
var
  i: Integer;
begin
  with StringGrid1 do
  begin
    // Limpiar datos previos
    for i := 0 to RowCount - 1 do Rows[i].Clear;
    Row:= 1;
    // Obtener columnas, poner títulos
    Carrito.Close;
    Carrito.SQL.Text:= 'SELECT * FROM LIBRO';
    Carrito.Open;
    ColCount:= Carrito.FieldCount; // Nro columnas = Nro campos
    FixedCols:= 0;
    FixedRows:= 1;
    // Poner títulos de columna
    for i:= 0 to ColCount-1 do
      Cells[i,0]:= Carrito.Fields[i].FieldName;
    // Preparar consulta
    Carrito.Close;
    Carrito.SQL.Text:= 'SELECT * FROM LIBRO WHERE ISBN = :PISBN';
    Carrito.Prepare;
    while Lista <> nil do
    begin
      Carrito.Close;
      Carrito.ParamByName('PISBN').AsString:= Lista.Dato;
      Carrito.Open;
      // Pasar registos a celdas
      while not Carrito.Eof do
      begin
        for i:= 0 to ColCount-1 do Cells[i, Row]:= Carrito.Fields[i].AsString;
        Carrito.Next;
        Row:= Row + 1;
        RowCount:= RowCount + 1;
      end;
      Lista:= Lista^.Sig;
    end;
  end;
end;

Saludos :)


La franja horaria es GMT +2. Ahora son las 05:55:59.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi