![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать колличество записей в DBGrid? [XP]
Neket © (2009-07-03 10:59:00)Собственно САБЖ...
Neket (2009-07-03 12:25:00) [21]Вооо вроде как-то так...
Компилируйте ))))
For i:=0 to dbgrid1.FieldCount-1 do
begin
razm:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[i].FieldName);
For n:=0 to Query1.RecordCount do
str:=Query1.FieldValues[DBGrid1.Columns[i].FieldName];
Razmtp:=DBGrid1.Canvas.TextWidth(str);
if razmtp>=razm then razm:=razmtp;
DBGrid1.Columns[i].Width:=razm+6;
Anatoly Podgoretsky (2009-07-03 12:14:00) [22]> sniknik (03.07.2009 11:57:25) [25]
Потому что FOR
Dennis I. Komarov (2009-07-03 12:13:00) [23]Ну ты напиши код, а потом выслушаешь... :) Будет очень интересно, ибо в [20] я оказался прав
Anatoly Podgoretsky (2009-07-03 12:13:00) [24]> Dennis I. Komarov (03.07.2009 11:37:15) [15]
А мы чего гадать должны, что у него, если он сам молчит как партизан?
Neket (2009-07-03 12:10:00) [25]Если есьт другие варианты решения то с удоваольствием выслушаю... Самому интересно
Neket (2009-07-03 12:07:00) [26]Я как сделаю напишу код...
а так основная мысль - это пробежать по всем ROWS текущей СOLUMN и используя razm:=DBGrid1.Canvas.TextWidth(str); найти максимальное значение потом чтобы более или менее красиво было задаем
DBGrid1.Columns[i].Width:=razm+6; (6-эксперементально подобрана)
Dennis I. Komarov (2009-07-03 12:01:00) [27]
> Neket (03.07.09 11:49) [22]
И каким образом оно будет проходить зная количество записей?
sniknik (2009-07-03 11:57:00) [28]> Это мне нужно чтобы как в экселе можно было подравнять все колонки по самой длиннойзаписи в этой колонке )))))
а почему тогда вопрос про количество записей, а не полей?
sniknik (2009-07-03 11:55:00) [29]> 1. Взять количество записей в TDataSet.
> 2. Взять DBGrid.Height
> 3. Вычислить DBGrid.RowHeight (не помню как, но можно)
> 4. Разделить одно на другое. Если разделилось не ровно, то div и потом +1
> 5. Значение из 3 (или 4) сравнить с количеством записей в TDataSet.
> 6. Если меньше или равно, то искомое число - в 3 (или 4).
> 7. Иначе - искомое число равно количеству записей в TDataSet.
все гораздо проще...
type
TMyDBGrid = class(TDBGrid);
...
ShowMessage( IntToStr(TMyDBGrid(DBGrid1).RowCount) );
Sergey13 (2009-07-03 11:50:00) [30]> [19] Ega23 © (03.07.09 11:42)
> Вобщем, самый более-менее надёжный способ
А самый, без всяких "более-менее", надежный способ - в цикле подсчитать. 8-)
Neket (2009-07-03 11:49:00) [31]
> Dennis I. Komarov © (03.07.09 11:44) [20]
)))))))))) А как ты догадался ?
Это мне нужно чтобы как в экселе можно было подравнять все колонки по самой длинной записи в этой колонке )))))
Ega23 (2009-07-03 11:49:00) [32]
> Сейчас выясниться что все это надо для for i....
:)))))))))
5 баллов!!!!
Dennis I. Komarov (2009-07-03 11:44:00) [33]
> Ega23 © (03.07.09 11:39) [18]
Я не знаю, поэтому и спросил ;) А вобще ну его фтопку...
ЗЫ
Сейчас выясниться что все это надо для for i....
Ega23 (2009-07-03 11:42:00) [34]Вобщем, самый более-менее надёжный способ:
Query.Open; // Открыли НД
Query.Last; // Получили все данные до конца
ShowMessage(IntToStr(Query.RecordCount)); // Вот теперь одлжно быть всё нормально. Но не факт, возможны нюансы в зависимости от реализации конкретного потомка TDataSet
Ega23 (2009-07-03 11:39:00) [35]
> Он вроде про Access говорил, хотя про ADO ни слова... БЕДЕ
> и с аксесом работает?
А почему нет-то? Там драйверок какой-то нужно ставить (не помню какой уже). Я в своё время (очень давно) курсач делал, как раз RxQuery и Access использовал.
Dennis I. Komarov (2009-07-03 11:39:00) [36]
> Neket (03.07.09 11:33) [14]
Тут тоже не факт, т.к. за время меджу двумя запросами могут иметь место изменения данных в БД
Ega23 (2009-07-03 11:37:00) [37]
> Тогда соме оно select count(*) from * )))
Это да. Но учти, что пока ты получил count, а потом открыл набор данных, прошло некоторое время. И нет никакой гарантии, что за это время данные остались те же самые. Может кто-то что-то добавил/удалил/изменил за это время. И это "что-то" попадает под твои условия выборки.
Dennis I. Komarov (2009-07-03 11:37:00) [38]
> Ega23 © (03.07.09 11:33) [13]
Он вроде про Access говорил, хотя про ADO ни слова... БЕДЕ и с аксесом работает?
Neket (2009-07-03 11:33:00) [39]Тогда соме оно select count(*) from * )))
Ega23 (2009-07-03 11:33:00) [40]
> Узаю Query1.RecordCount
Это ненадёжное решение. Сдаётся мне, ты используешь BDE. А там далеко не факт, что данные профетчились все до конца.