|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ХЕЛП ПЛИЗ неопытному! Выделить одинаковые строки в двух DBGrid-ах
Памагите мне пожайлуйста
как выделить одинаковые строки в двух 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
|
|||
|
|||
А теперь пока горече, можно еще один вопрос рассмотреть.
У меня эти две кнопочки прекраствно исполняют свои функции. А как теперь будет выглядеть операция с невыделеными строками: тоесть перенести эти оставшиися неокрашенные строки из одного ДБГрид-а в другой. Тут все гораздо сложнее. Тут работа не с самими гридами а с соурсами. Вот только как определить эти невыделенные строки и как СКЛ-скриптом перегнать их в другой Грид (таблицу)? |