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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.07.2009, 15:09
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
Вопрос Подсчитать закрашенные строки в DBGrid-e

Подскажите пожалуйста, как подсчитать количество закрашенных строк в DBGrid-e?
Ответить с цитированием
  #2  
Старый 29.07.2009, 15:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Что ты имеешь в виду под "закрашеных"?
Это что-ли грид с мультиселектом?
Ответить с цитированием
  #3  
Старый 29.07.2009, 16:21
Saint Garry Saint Garry вне форума
Прохожий
 
Регистрация: 12.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Наверное эта тема - есть продолжение другой : http://www.delphisources.ru/forum/showthread.php?t=8841

Если так, то почему бы не считать строки одновременно в цикле где они анализируются
Например :
Код:
private
 FLightedRowsCounter : integer;
.....
TForm1.FormCreate(sender:Tobject);
begin
FLightedRowsCounter := 0;
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);

// Увеличиваем счетчик
inc(FLightedRowsCounter);

 end;
 end;
end;

...

А дальше используеш значение FLightedRowsCounter как тебе нужно.
Ответить с цитированием
  #4  
Старый 29.07.2009, 16:55
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Сразу скажу, что не проверял... Но не уверен, что дельфя отрисовывает весь датасет сразу, а не только его видимую область...

Если у топикстартера был вопрос именно по "пользовательской" отрисовки записей, то стоит смотреть в сторону запроса.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #5  
Старый 29.07.2009, 17:34
kaktuss kaktuss вне форума
Прохожий
 
Регистрация: 20.07.2009
Сообщения: 9
Репутация: 10
По умолчанию

Ну и где впихивать сюда Label1, чтоб увидеть количество строк закрашенных?

Вот кусочек кода по которому строки в гриде красятца:
Код:
procedure Tfrm_Main.DBGrid15DrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
var
i:integer;
begin
if  Length(aa)>0 then
begin
i:=DBGrid15.DataSource.DataSet.RecNo;
if  DBGrid15.DataSource.DataSet.RecNo = aa[i-1].zap3  then
begin
dbgrid15.Canvas.Brush.Color := cllime;
  DBGrid15.Canvas.Font.Color := clRed;
  dbGrid15.DefaultDrawDataCell(Rect,Field,State);
end;
end;
end;

procedure Tfrm_Main.SpeedButton21Click(Sender: TObject);
var
i1, i2, p1, p2 : integer;
begin

SetLength(aa, 0);
DBGrid16.DataSource.DataSet.Last;
DBGrid16.DataSource.DataSet.First;
SetLength(bb, 0);
DBGrid15.DataSource.DataSet.Last;
DBGrid15.DataSource.DataSet.First;

DBGrid15.DataSource.DataSet.First;
DBGrid16.DataSource.DataSet.First;
p1 := DBGrid15.DataSource.DataSet.RecordCount-1 ;
p2 := DBGrid16.DataSource.DataSet.RecordCount-1 ;

//******************
DBGrid15.DataSource.DataSet.DisableControls;
try
for i1:=0  to p1 do
  begin
    SetLength(aa, Length(aa) + 1);
    aa[i1].zap1:= DBGrid15.DataSource.DataSet.RecNo;
    aa[i1].zap2:= DBGrid15.DataSource.DataSet.FieldValues['ACTION_CODE'];
    DBGrid15.DataSource.DataSet.Next;
  end;
finally
DBGrid15.DataSource.DataSet.EnableControls;
end;
DBGrid16.DataSource.DataSet.DisableControls;
try
for i2:=0  to p2 do
  begin
    SetLength(bb, Length(bb) + 1);
    bb[i2].zap1:= DBGrid16.DataSource.DataSet.RecNo;
    bb[i2].zap2:= DBGrid16.DataSource.DataSet.FieldValues['ACTION_CODE'];
    DBGrid16.DataSource.DataSet.Next;
  end;
  finally
DBGrid16.DataSource.DataSet.EnableControls;
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;
DBGrid15.DataSource.DataSet.First;
DBGrid16.DataSource.DataSet.First;

end;
Aristarh Dark: Тэги, тэги и еще раз тэги.
Первое предупреждение, читай правила.



Ну так и вопрос: узнать сколько строк в гриде закрашено?
Чего не понятно?!

Grid не мульти.
Ответить с цитированием
  #6  
Старый 29.07.2009, 18:20
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А непонятно кто закрасил строки грида. Я думаю маркером поверх монитора? Угадал?

ЗЫЖ А по существу, смотри мой предыдущий пост.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #7  
Старый 30.07.2009, 15:08
Saint Garry Saint Garry вне форума
Прохожий
 
Регистрация: 12.04.2009
Сообщения: 18
Репутация: 10
По умолчанию

Строки красятся по событию Tfrm_Main.DBGrid15DrawDataCell,
В этом же событии нужно увеличивать счетчик закрашиваемых строк.
Вот немного поправил предыдущий код:

Код:
var
  Form1: TForm1;
  aa: array of MyType1;
  bb: array of MyType2;
// счетчик строк
 FLightedRowsCounter : integer;
// указатель строки
 FCurrentRowNum : integer;

implementation
...

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);
 
// Увеличиваем счетчик если нашли новую совпавшую запись
if (FCurrentRowNum <> DBGrid1.DataSource.DataSet.RecNo) then inc(FLightedRowsCounter);
// устанавливаем указатель на новую запись
FCurrentRowNum := DBGrid1.DataSource.DataSet.RecNo;

 end;
 end;
end;

...



procedure Tfrm_Main.SpeedButton21Click(Sender: TObject);
var
i1, i2, p1, p2 : integer;
begin
// обнуляем счетчик и указатель строки устанавливаем в -1
FLightedRowsCounter := 0;
FCurrentRowNum :=-1;
SetLength(aa, 0);
DBGrid16.DataSource.DataSet.Last;
DBGrid16.DataSource.DataSet.First;
SetLength(bb, 0);
DBGrid15.DataSource.DataSet.Last;
DBGrid15.DataSource.DataSet.First;

DBGrid15.DataSource.DataSet.First;
DBGrid16.DataSource.DataSet.First;
p1 := DBGrid15.DataSource.DataSet.RecordCount-1 ;
p2 := DBGrid16.DataSource.DataSet.RecordCount-1 ;

//******************
DBGrid15.DataSource.DataSet.DisableControls;
try
for i1:=0  to p1 do
  begin
    SetLength(aa, Length(aa) + 1);
    aa[i1].zap1:= DBGrid15.DataSource.DataSet.RecNo;
    aa[i1].zap2:= DBGrid15.DataSource.DataSet.FieldValues['ACTION_CODE'];
    DBGrid15.DataSource.DataSet.Next;
  end;
finally
DBGrid15.DataSource.DataSet.EnableControls;
end;
DBGrid16.DataSource.DataSet.DisableControls;
try
for i2:=0  to p2 do
  begin
    SetLength(bb, Length(bb) + 1);
    bb[i2].zap1:= DBGrid16.DataSource.DataSet.RecNo;
    bb[i2].zap2:= DBGrid16.DataSource.DataSet.FieldValues['ACTION_CODE'];
    DBGrid16.DataSource.DataSet.Next;
  end;
  finally
DBGrid16.DataSource.DataSet.EnableControls;
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;
DBGrid15.DataSource.DataSet.First;
DBGrid16.DataSource.DataSet.First;

// отображаем количество закрашеных строк
Label1.caption := inttostr( FLightedRowsCounter);


end;


Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter