PDA

Ver la Versión Completa : Busqueda y visualizacion en DBGrid seleccionado solo Fila


sisne
21-03-2010, 20:07:19
Hola!
Tengo un formulario en el cual esta la Ttabla de tados de universitario con los campos IdE, NumeroRegistro, carnet Identidad, Nombres, apellidos, fechas, edades, etc...Tinscripcion.

Esto lo puse en el Form1(=Facademico) en un DBgrid1, y por medio de un boton llamo a otro form2(Finscripcion) donde ingreso los datos del universitario y realizo las demas opciones sin problem.
Ahora en lo que tengo problemas es...
Necesito realizar una busqueda , este boton lo tengo en el Form1(Facademico) la busqueda quiero que lo realice por cualquier medio de los campos de Universitario, si lo encuentro quiero que en el DBgrid1 me lo "seleccione". Cabe mensionar que el DBgrid , solo es visualizacion, ya que las modificaciones lo puedo hacer en el Form2(Finscripcion.). Solo quiero que me lo seleccione toda la fila del DBgridsi es que encuentro el dato buscado.

La busqueda lo estuve haciendo por medio de otro Form3(Fbusqueda). Ya que con esta buscqueda puedo saber si fue inscrito o aun no. Y si esta inscrito pues quiero saber sus otras dependencias.
Me explico, Tuniversitario lleva varias materias de varios semestres o años. Ejemplo. Juan Perez, llevaria Programacion I del 1º semestre, Fisica II del 2º semestre, ingles del 1º semestre, etc...de una carrera en especifico. Y asi sucesivamente...
Es decir en Facademico, tengo DbGrid1(visualizo los inscritos universitario), en el DBgrid1, que tb se encuentra en el mismo Facademico, se visualiza las materias que llevara, ingreso las materias a través de otro Form4...

Bueno una vez encontrado al Universitario que fue inscrito, pues tambien debo buscar por decir, ejemplo: Por medio de su CodigoMateria o NombreMateria, etc y si lo encuentra pues quiero que tb en el DBGrid2 [B]me lo seleccione solo la fila y de esta manera poder realizar las modificaciones o simplemente imprimir sus campos de esa materia con el nombre del Universitario etc....
Estoy usando SQL server 2000 y Delphi.
Si usaria StringGrid su codigo lo hice asi...Pero yo quiero que en el DBgrid2 solo me seleccione...
Ejemplo, si buscaria por medio de su Carnet Identidad:

procedure TFacademico.BuscarClick(Sender: TObject);
begin
if not (DM.Tinscripcion.Locate('CiE',Edit1.Text,[loPartialKey,loCaseInsensitive])) and not(Edit1.Text = ' ') then
if messageDlg('No se encontro el registro..Buscar de nuevo?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then Edit1.SetFocus
else close;
if DM.Tinscripcion.Locate('CiE',Edit1.Text,[loPartialKey,loCaseInsensitive]) then
begin
sg.Cells[1,1]:=DM.Tinscripcion['NumReg'];
sg.Cells[1,2]:=DM.Tinscripcion['CiE'];
sg.Cells[1,3]:=DM.Tinscripcion['NomE';
sg.Cells[1,4]:=DM.Tinscripcion['FinscripcionE'];
sg.Cells[1,5]:=DM.Tinscripcion['CarreraE'];
sg.Cells[1,6]:=DM.Tinscripcion['TiempoE'];
sg.Cells[1,7]:=DM.Tinscripcion['ModalidadE'];
sg.Cells[1,8]:=DM.Tinscripcion['estadoE'];
sg.Cells[1,9]:=DM.Tinscripcion['DeptoE'];
sg.Cells[1,10]:=DM.Tinscripcion['LugarE'];
sg.Cells[1,11]:=DM.Tinscripcion['CalleE'];
end
else
begin
sg.Cells[1,1]:= '';
sg.Cells[1,2]:= '';
sg.Cells[1,3]:= '';
sg.Cells[1,4]:= '';
sg.Cells[1,5]:= '';
sg.Cells[1,6]:= '';
sg.Cells[1,7]:= '';
sg.Cells[1,8]:= '';
sg.Cells[1,9]:= '';
sg.Cells[1,10]:= '';
sg.Cells[1,11]:= '';
end;
end;

Aqui me visualiza en una columna sus datos, pero yo quiero que me seleccione/visualice en el DBGrid2 en la fila, cabe mensionar que tengo vaaarios universitarios registrados.
Disculpen que sea tan extensa.Gracias!

BrunoBsso
21-03-2010, 20:27:24
Hola.
Te recomiendo que leas cómo usar las etiquetas vB (http://www.clubdelphi.com/foros/showthread.php?t=10005) para que nos sea más fácil entenderte. No es difícil.
Otro tip muy bueno (para el foro y la vida real) es decir Hola cuando quieras hablar con alguien.
Saludos!

ecfisa
21-03-2010, 21:48:26
Hola sisne.

Si tenes conectada la busqueda al mismo DataSource que el DBGrid, en este tendría que quedar seleccionada la fila elegida en la búsqueda.

Ahora si como decis lo único que queres es que se seleccione la fila entera y no sólo una columna en el DBGrid, tenes que poner:
DBGrid1.Options.dgRowSelect:= True; (lo podes hacer desde el Object inspector)

Saludos.

sisne
22-03-2010, 18:06:30
Hola!
Tengo una Form1 principal y otro Form2 de busqueda.
En el principal esta un DBgrid1 donde estan se visualizan todos los datos y en sus opciones tb lo active para que toda la fila se seleccione.
Entonces voy al Form2 donde realizo una busqueda, digamos por medio de CarnetIdentidad y quiero que una vez encontrado el dato quiero que en el Form1 en el DBgrid1 me visualice en toda la fila el dato encontrado y si se pudiese colocar de otro color, ya que por defecto es de color azul seleccionado.

sisne
23-03-2010, 22:54:38
Holas!
Creo que no fui muy clara....
Comentarles que ya encontré la solución, coloque el sigte codigo después de realizar la búsqueda respectiva, al momento de volver al FormPrincipal y me selecciona toda la fila del DBgrid:

Facademico.DBGrid.Fields[1].focuscontrol;


Solo quiero saber si puede colorearse solo una fila de un DBGrid?????

Graaaacias por su cooperación!

ecfisa
25-03-2010, 02:00:44
Hola de nuevo.

Tal como te dije anteriormente, para que se 'pinte' sólo una fila, tenés que poner a True la propiedad dgRowSelect, lo que hace que la fila seleccionada esté coloreada.

Ahora para cambiar el color de la selección colocá este código en el evento DrawColumnCell del DBGrid:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then
with DBGrid1 do
begin
Canvas.brush.Color:= clRed; // Fondo rojo ...
Canvas.Font.Color:= clWhite; // Texto blanco...
DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;


Saludos.

sisne
26-03-2010, 06:54:13
Hola!
ecfisa te cuento que ya tenia activado True la propiedad dgRowSelect, y pues como decia antes, me seleccionaba de color azul por defecto.
Y con el código que me diste, si me pinto de otro color, me selecciono de color rojo cuando realizaba la busqueda (perfecto!).

El problema es que me selecciona ahora dos filas, una por defecto de color azul y la otra de color rojo (con esta ultima estoy de acuerdo)
Quisiera saber como puedo hacer desaparecer la seleccionada por defecto de color azul(que antes de realizar la busqueda estuvo seleccionada), y solo quisisera que me aparezca una seleccionada, es decir solo la de color rojo, que es cuando me lanza como resultado a la busqueda y se me pinta de color rojoa la encontrada.
Espero haber sido clara...
Gracias!

ecfisa
26-03-2010, 18:06:34
Hola sisne.

Lo único que se me ocurre es que tengas activada la opcion dgMultiSelect.

probá de poner este código antes de la entrada al DBGrid:

DBGrid1.Options:= DBGrid1.Options - [dgMultiSelect];


Saludos

ecfisa
26-03-2010, 18:26:12
Pensando un poco más... esto sólo se podría dar si:

1) Tenés la opcion dgMultiSelect activada (y la estás usando... :)).
2) El evento OnDrawColumnCell lo asignas mediante código, por ej:
DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
3) Esta última asignación la haces después de llamar a otro Form.

De este modo cuando cerras el segundo Form, en el Form inicial te queda una fila en azul y otra en rojo.


Saludos.

sisne
26-03-2010, 22:22:05
Hola!

Esta bien, lo voy a probar.
Gracias!