Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
Question Recorrer un Grid

Hola a Todos!

nuevamente por aquí...

tengo un objeto dggrid, al cual necesito recorrerlo en un momento determinado, desde la primera fila a la fila en la que actualmente me encuentro posicionado. al realizar este recorrido

debo ir comparando el valor de cierta columna( supongamos Nro. de documento) para ver si contiene el mismo valor que la misma columna de la fila en la que actualmente estoy posicionado.

mis dudas entre muchas son las siguientes:

-como puedo obetener la fila en la que actualmente estoy posicionado?

- como puedo hacer el recorrido del grid (se que puedo utilizar for o whiles , pero no se como ir avanzando el indice del grid)?

- al ir recorriendo cada fila como le indico al sistema que el valor de la columna que necesito, debe corresponder a la fila que actualmente estoy recorriendo?


cualquier salvavidas será bienvenido!

salu2!
__________________
"Todo lo que puede fallar, falla."

Última edición por TelloClos fecha: 17-07-2003 a las 18:47:36.
Responder Con Cita
  #2  
Antiguo 13-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Creo que si desarrollas esta idea te podrá servir:

Código:
procedure TForm1.Button1Click(Sender: TObject);
Var
nActualRow,nTotalRows:Integer;
Ret:String;
begin
Ret:=Chr(13);
ShowMessage(DbGrid1.Columns[0].Field.asString);

nActualRow:=TsTringGrid(DbGrid1).Row;
nTotalRows:=TsTringGrid(DbGrid1).RowCount;
ShowMessage('Fila Actual: '+IntToStr(nActualRow)+Ret+
'Total Filas: '+IntToStr(nTotalRows));
//Ir a la primera
Table1.MoveBy(-nActualRow);
end;
Un Saludo.
Responder Con Cita
  #3  
Antiguo 15-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
Question

gracias por la atención marcos!

mira intentamos realizar un rutina más o menos relacionada con los resultados que pretendemos obtener con las propiedades sobre los cuales he solicitado información

pero no nos esta funcionando

a considerar: la grid esta enlasada a un datasource , el cual a su vez toma los valores de un procedimiento almacenado, el cual esta concentado a obejto conexión que esta en comunicación con un motor de base de datos Sql Server 2000.
Todos los objetos exceptuando el DataSource son de la tecnologia ADO

expongo la rutina ejemplo a continuación:

for i := 1 to tstringgrid(dbgrid1).rowcount -1 do
begin
tstringgrid(dbgrid1).row := i;
dbgrid1.setfocus;
Vtotal := VTotal + dbgrid1.Columns[0].asinteger;
end;
showmessage(inttostr(Vtotal))

- lo que suecede en esta rutina es que el valor de la columna no se actualiza, es decir, simpre contiene el valor de la columna en la primera fila ( tstringgrid(dbgrid1).row = 1)


otra forma en que intentamos plantear esto pero optuvimos el mismo resultado fue:

tstringgrid(dbgrid1).col := 0;
for i := 1 to tstringgrid(dbgrid1).rowcount -1 do
begin
tstringgrid(dbgrid1).row := i;
dbgrid1.setfocus;
Vtotal := VTotal + dbgrid1.selectedField.value;
end;
showmessage(inttostr(Vtotal))


espero me puedan ayudar en algo sobre este problemilla !
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #4  
Antiguo 15-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Un par de comentarios.

Los componentes DBGrid no están hechos para "recorrerse". Lo que se recorre es el DataSet asociado.

Al comenzar el recorrido puedes obtner los datos de la fla actual con DataSet.FieldByName y recorrer el DataSet con DataSet.Next.

El que los DBGrid no estén hechos para recorrerse no es sólo un capricho mío. Los DBGrid son grids "virtuales", relamente no contienen todos los registros; de lo contrario tendrían que almacenar en memoria todo el contenido de una tabla, lo cual pueden ser miles, cientos de miles o millones de registros. El DBGrid controla el desplazamiento y va leyendo los registros conforme se necesite.

Acabo de hacer una pequeña prueba colcando un DBGrid con 15 filas visibles y no importa en que parte del recorrido me encuentre la propiedad RowCount es siempre 16 (una más de las filas visibles).

El otro comentario es que no debe hacerse un casting del estilo TStringGrid(DBGrid) ya que TStringGrid no es un ancestro de DBGrid (esto ya se discutió anteriormente). Lo correcto sería declarar un descendiente de TDBGrid, digamos TUPDBGrid y hacer el "casting" con él para acceder a las propiedades protegidas.

Pero aún así, está el problema que menciono antes. Hay una buena razón para que Borland haya decidido no publicar en TDBGrid propiedades como RowCount: Las filas son "virtuales", no existen sino que se van actualizando conforme nos vamos desplazando por el DataSet.

// Saludos
Responder Con Cita
  #5  
Antiguo 15-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Yo creo que lo mas normal es hacer algo como:


Código:
Var
  Llave : String;

Begin
  Llave := dbGrid1.DataSource.DataSet.FieldByName('Llave').AsString;
  dbGrid1.DataSource.DisableControls;
  try
    with dbGrid1.DataSource.DataSet do
    Begin
      First;
      Suma := 0;
      While (not eof) and not (FieldByName('Llave').AsString = Llave) do
      Begin
         suma := Suma + FieldByName('CampoNumerico').AsFloat;
         Next;
      End; 
      ShowMessage('Suma ' + FloatToStr(Suma));
    End;
  finally
    dbGrid1.DataSource.EnableControls;
  End;
End;
Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 15-07-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Completamente de acuerdo jachguate, todo el recorrido es en el dataset.

// Saludos
Responder Con Cita
  #7  
Antiguo 15-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
Muuuuuuuchas Gracias!!!!

en primer lugar a roman, por la explicación conceptual del grid, que me aclaro bastante los conceptos con respecto al manejo de este objeto

y en segundo lugar a juan por el ejemplo entregado, con el cual el problema que habia planteado me funciono del 1.!

GRandes!!!!!!!!!

me han ayudado a ver la luz!

Saludos!!!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #8  
Antiguo 15-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Veo que la pregunta en un principio no estaba bien formulada, porque no era recorrer la rejilla lo que pretendías, sino recorrer el DataSet y sumar ciertos registros.

Cosa que ya ha quedado perfectamente explicada por Román y JachGuate.

Un Saludo.
Responder Con Cita
  #9  
Antiguo 15-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
la verdad es que en otros lenguajes , yo si recorria la grilla para obtener los valores de los campos, no sabia que en este lenguaje se recorria el conjunto de datos enlasado

saludos!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #10  
Antiguo 17-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
Question

Hola Nuevamente!

una pequeña dudilla.

este procedimiento de recorrido de la grilla sobre el cual les he consulta , lo tengo gatillado en el evento keypress de lagrilla, cuando es realizado sobre una columna especifica, ahora mi duda es de como hacer para volver a la posición de la grilla donde me encontraba al momento en que se ejecuto el procedimiento ( fila y columna)

De ante mano muchas gracias!.
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #11  
Antiguo 17-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Normalmente cuando recorro un DataSet, que tiene asociado controles visuales hago esto:
Código:
DataSet.DisableControls;
try
  Bookmark := DataSet.Bookmark;
  try
    DataSet.First;
    while not DataSet.EOF do begin
      ....
      DataSet.Next;
    end;
  finally
    DataSet.Bookmark := Bookmark;
  end;
finally
  DataSet.EnableControls;
end;
El DisableControls es para que los controles no reflejen el cambio de registro y el BookMark es para retornar a la posición anterior.

Comentario: Ten en cuenta que este código esta recorriendo el DataSet desde el primer registro, creo que esto tu no lo quieres.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 17-07-2003 a las 18:55:23.
Responder Con Cita
  #12  
Antiguo 21-07-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
no te compliques trabajando con el grid directamente, ya que no es un componente para hacer recorridos sobre la data puesta en el.
puedes probar mejor un recorrido sobre un MEMORYDATA de la coleccion de los RX y sincronizar tu resultado en el grid.
el memorydata trabaja igual que como si fueses recorriendo una tabla.
__________________
ing. frankmch
Responder Con Cita
  #13  
Antiguo 21-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
gracias por las acotaciones!

permite el memory data editar las celdas?

salu2!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #14  
Antiguo 21-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
donde puedo encontrar los rx no los puedo encontrar en la paleta de controles?

salud2!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #15  
Antiguo 21-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Las RxLibs no vienen con Delphi, las tienes que bajar de sitios como Torry.net. Te cuento que te TRxMemoryData no es mas que un DataSet que se carga en memoria, no se cual es tu necesidad pero si solo quieres recorrer datos que son accesibles fácilmente desde la base de datos, no te recomiendo usarlo, a menos que necesites algo muy particular.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #16  
Antiguo 22-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
Cita:
Posteado originalmente por delphi.com.ar
Las RxLibs no vienen con Delphi, las tienes que bajar de sitios como Torry.net. Te cuento que te TRxMemoryData no es mas que un DataSet que se carga en memoria, no se cual es tu necesidad pero si solo quieres recorrer datos que son accesibles fácilmente desde la base de datos, no te recomiendo usarlo, a menos que necesites algo muy particular.

Saludos!
igual es un poco complejo lo que quiero hacer , datos traido desde un procedimiento almacenado el cual procesa varias tablas para poder entregar el conjunto de datos resultado.
la forma en la que se utilizará esta consulta igual será requerida por varios usuarios a la ves ( 50 mas o menos), este control no presenta problemas de ese tipo, o algun problema con respecto a la cantidad de registros que se le puedan pasar?


salu2!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #17  
Antiguo 22-07-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Post

hola.

yo he trabajado con el memorydata y le he cargado mas de 8000 registros y no ha fallado, tambien los he cargado don data proveniente de varias tablas y similar cantidad de registros.
los he probado en cliente servidor y es muy util ya que al traerte una copia de la tabla al memory le quitas trabajo al server y evitas tambien tener un archivo en el cliente.
yo trabajo con este componente en client-server por cuestion de seguridad ya que procesamos todo en el cliente mediante un memory y asi evito acceder al server, y hacerlo cuando las transacciones estan completas.
se pueden recorrer igual que un dataset.
la unica posible limitante seria la memoria virtual que dispongas en ese momento, pero ojo, a mi nunca me ha dado problemas eso.
he hecho pruebas de este componente con 8000 registros o mas en una P2 corriendo sql server y win 2000 server y esto nunca me ha sucedido.

ademas al usar este componente evitas escribir en la bd y te podria permitir hacer una rutina de deshacer....
__________________
ing. frankmch
Responder Con Cita
  #18  
Antiguo 22-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
ok. , muchas gracias, voy a estudiar el caso...

...pero eso si todavia no puedo encontrar este componente en torry.net no lo ubique, algún sitio donde lo pueda hallar?

salu2
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
  #19  
Antiguo 22-07-2003
frankmch frankmch is offline
Miembro
 
Registrado: jul 2003
Ubicación: venezuela
Posts: 76
Poder: 21
frankmch Va por buen camino
Post

en esta misma pagina, en la seccion componentes>coleeciones>rxlib
__________________
ing. frankmch
Responder Con Cita
  #20  
Antiguo 22-07-2003
TelloClos TelloClos is offline
Miembro
 
Registrado: may 2003
Ubicación: Chile
Posts: 48
Poder: 0
TelloClos Va por buen camino
gracias!
__________________
"Todo lo que puede fallar, falla."
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:07:12.


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
Copyright 1996-2007 Club Delphi