![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Памагите мне пожайлуйста
как выделить одинаковые строки в двух DBGrid-ах |
|
#2
|
|||
|
|||
|
Может быть Вы имели в виду - в двух открытых наборах данных (в контексте этих DBGrid) ?
|
|
#3
|
|||
|
|||
|
Да именно так, только как это все осуществить?
Пример. Есть два ДБГрида. Но у них есть одинаковие строки с одинаковыми данными. Вот и надо по нажатию на кнопку эти одинаковые строки выделить. |
|
#4
|
||||
|
||||
|
попробуй так select.rar
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, ExtCtrls;
type
MyType1 = record
zap1: integer;
zap2: string;
zap3: integer;
end;
type
MyType2 = record
zap1: integer;
zap2: string;
zap3: integer;
end;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource1: TDataSource;
DataSource2: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
ADOTable1key: TAutoIncField;
ADOTable1familiy: TWideStringField;
ADOTable1imu: TWideStringField;
ADOTable1vozrast: TWideStringField;
ADOTable2keyy: TAutoIncField;
ADOTable2familiy: TWideStringField;
ADOTable2imu: TWideStringField;
ADOTable2vozrast: TWideStringField;
procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
aa: array of MyType1;
bb: array of MyType2;
implementation
{$R *.dfm}
function findAA(const S:integer):integer;
var
i:integer;
begin
Result:=0;
for i:=0 to Length(bb)-1 do
begin
if aa[S].zap2 = bb[i].zap2 then
begin
Result:= aa[S].zap1;
exit;
end;
end;
end;
function findBB(const S:integer):integer;
var
i:integer;
begin
Result:=0;
for i:=0 to Length(aa)-1 do
begin
if bb[S].zap2 = aa[i].zap2 then
begin
Result:= bb[S].zap1;
exit;
end;
end;
end;
//--------------------------------------------------------------------------
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
i:integer;
begin
if Length(aa)>0 then
begin
i:=DBGrid1.DataSource.DataSet.RecNo;
if DBGrid1.DataSource.DataSet.RecNo = aa[i-1].zap3 then
begin
dbgrid1.Canvas.Brush.Color := cllime;
DBGrid1.Canvas.Font.Color := clRed;
dbGrid1.DefaultDrawDataCell(Rect,Field,State);
end;
end;
end;
procedure TForm1.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
var
i:integer;
begin
if Length(bb)>0 then
begin
i:=DBGrid2.DataSource.DataSet.RecNo;
if DBGrid2.DataSource.DataSet.RecNo = bb[i-1].zap3 then
begin
dbgrid2.Canvas.Brush.Color := cllime;
DBGrid2.Canvas.Font.Color := clRed;
dbGrid2.DefaultDrawDataCell(Rect,Field,State);
end;
end;
end;
//-----------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
i1, i2, p1, p2 : integer;
begin
DBGrid1.DataSource.DataSet.First;
DBGrid2.DataSource.DataSet.First;
p1 := DBGrid1.DataSource.DataSet.RecordCount-1 ;
p2 := DBGrid2.DataSource.DataSet.RecordCount-1 ;
for i1:=0 to p1 do
begin
SetLength(aa, Length(aa) + 1);
aa[i1].zap1:= DBGrid1.DataSource.DataSet.RecNo;
aa[i1].zap2:= DBGrid1.DataSource.DataSet.FieldValues['vozrast'];
DBGrid1.DataSource.DataSet.Next;
end;
for i2:=0 to p2 do
begin
SetLength(bb, Length(bb) + 1);
bb[i2].zap1:= DBGrid2.DataSource.DataSet.RecNo;
bb[i2].zap2:= DBGrid2.DataSource.DataSet.FieldValues['vozrast'];
DBGrid2.DataSource.DataSet.Next;
end;
for i1:=0 to Length(aa)-1 do
begin
aa[i1].zap3 := findAA(i1);
end;
for i2:=0 to Length(bb)-1 do
begin
bb[i2].zap3 := findBB(i2);
end;
DBGrid1.DataSource.DataSet.First;
DBGrid2.DataSource.DataSet.First;
end;
end. |
|
#5
|
|||
|
|||
|
офигительно круто. Большое спасибки Болшое Большое.
|
|
#6
|
|||
|
|||
|
Да, это конечно нормально, но просидел несколько часов над событием другой кнопки, но в итоге что-то не получилось ничего. Не мог бы ты еще мне помочь с одним листингом:
по нажатию на другую кнопку чтобы сткроки которые в ДБГриде выделены другим цветом и другим цветом шрифта были как в обычном состоянии, тоисть чтоб цвет шрифта сделался как до изминения - черного цвета |
|
#7
|
||||
|
||||
|
Код:
procedure TForm1.Button2Click(Sender: TObject); begin SetLength(aa, 0); DBGrid1.DataSource.DataSet.Last; DBGrid1.DataSource.DataSet.First; SetLength(bb, 0); DBGrid2.DataSource.DataSet.Last; DBGrid2.DataSource.DataSet.First; end; |
|
#8
|
|||
|
|||
|
Большое тебе спасибки. Вот то что мне надо.
Моя задача решена. Спасибки тебе большое. |
|
#9
|
|||
|
|||
|
А теперь пока горече, можно еще один вопрос рассмотреть.
У меня эти две кнопочки прекраствно исполняют свои функции. А как теперь будет выглядеть операция с невыделеными строками: тоесть перенести эти оставшиися неокрашенные строки из одного ДБГрид-а в другой. Тут все гораздо сложнее. Тут работа не с самими гридами а с соурсами. Вот только как определить эти невыделенные строки и как СКЛ-скриптом перегнать их в другой Грид (таблицу)? |