Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.07.2009, 09:49
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию ХЕЛП ПЛИЗ неопытному! Выделить одинаковые строки в двух DBGrid-ах

Памагите мне пожайлуйста
как выделить одинаковые строки в двух DBGrid-ах
Ответить с цитированием
  #2  
Старый 21.07.2009, 17:30
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Может быть Вы имели в виду - в двух открытых наборах данных (в контексте этих DBGrid) ?
Ответить с цитированием
  #3  
Старый 22.07.2009, 10:46
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

Да именно так, только как это все осуществить?
Пример.
Есть два ДБГрида. Но у них есть одинаковие строки с одинаковыми данными. Вот и надо по нажатию на кнопку эти одинаковые строки выделить.
Ответить с цитированием
  #4  
Старый 22.07.2009, 21:50
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

попробуй так 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  
Старый 24.07.2009, 16:47
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

офигительно круто. Большое спасибки Болшое Большое.
Ответить с цитированием
  #6  
Старый 27.07.2009, 09:45
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

Да, это конечно нормально, но просидел несколько часов над событием другой кнопки, но в итоге что-то не получилось ничего. Не мог бы ты еще мне помочь с одним листингом:
по нажатию на другую кнопку чтобы сткроки которые в ДБГриде выделены другим цветом и другим цветом шрифта были как в обычном состоянии, тоисть чтоб цвет шрифта сделался как до изминения - черного цвета
Ответить с цитированием
  #7  
Старый 27.07.2009, 14:03
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Код:
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  
Старый 27.07.2009, 14:47
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

Большое тебе спасибки. Вот то что мне надо.
Моя задача решена. Спасибки тебе большое.
Ответить с цитированием
  #9  
Старый 27.07.2009, 15:57
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

А теперь пока горече, можно еще один вопрос рассмотреть.

У меня эти две кнопочки прекраствно исполняют свои функции. А как теперь будет выглядеть операция с невыделеными строками: тоесть перенести эти оставшиися неокрашенные строки из одного ДБГрид-а в другой. Тут все гораздо сложнее. Тут работа не с самими гридами а с соурсами. Вот только как определить эти невыделенные строки и как СКЛ-скриптом перегнать их в другой Грид (таблицу)?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter