Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.17;
Скачать: CL | DM;

Вниз

Создание столбцов в DBGrid в рантайме   Найти похожие ветки 

 
Conder   (2003-02-21 16:45) [0]

Имеется ADOQuery SQL-значение которого меняется в рантайме. Для того чтобы осуществлять сортировку при клике на заголовке есть следующий код:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ADOQuery1.Close;
ADOQuery1.DisableControls;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text:=SQL_text+" order by "+ Column.FieldName;
Memo1.Lines.Text:=ADOQuery1.SQL.Text;
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color := clBlue; <-- здесь вылетает ошибка
ADOQuery1.EnableControls;
ADOQuery1.ExecSQL;
end;
Проблема оказалась в столбцах сетки. Пытаюсь создать в рантайме
procedure TForm1.BitBtn1Click(Sender: TObject);
var i:integer;
begin
s:=TStringList.Create;
try
ADOQuery1.GetFieldNames(s);
for i:=0 to S.Count-1 do
begin
DBGrid1.Columns.Items[i].FieldName:=s[i];
DBGrid1.Columns.Items[i].FieldName:=s[i];
end;
finally
s.Free;
end;
ADOQuery1.Open;
end;
- при щелчке на заголовке в гриде ничего не отображается
чем лечить?


 
Соловьев ©   (2003-02-21 16:48) [1]


> Column.Title.Font.Color := clBlue; <-- здесь вылетает ошибка
>

Вообще-то нужно указать владельца Column...


 
sniknik ©   (2003-02-21 17:36) [2]

не там проблему ищеш.

достаточно следующего кода.

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ADOQuery1.Sort:= Column.FieldName;
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color:= clBlue;
end;

+ проверки на открытость датасета и т.д. если хочется.
(вылетает потому что рекордсет закрыт поля не уже не существуют ссылка по Column хрен знает куда указывает)


 
sniknik ©   (2003-02-21 17:41) [3]

ошибся на пустую структуру кажет (значит ресторедефаулт с пустой не работает), ну можно тогда добавить и без всяких проверок обойтись

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if Column.FieldName = "" then exit;
ADODataSet1.Sort:= Column.FieldName;
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color:= clBlue;
end;


 
Johnmen ©   (2003-02-22 00:04) [4]

1. DBGrid1.Columns.RestoreDefaults; по-моему, лишнее...
2. if Column.Field = nil then exit;


 
sniknik ©   (2003-02-22 01:34) [5]

1 не лишнее. но поменять на чтонибудь типа
for i:= 0 to DBGrid1.Columns.Count-1 do DBGrid1.Columns[i].Title.Font.Color:= clBlack;
не помешает.

2 да, так лутше.


 
Johnmen ©   (2003-02-22 01:45) [6]

>sniknik © (22.02.03 01:34)

Ну не понимаю я смысла применения ни DBGrid1.Columns.RestoreDefaults; ни приведенного тобой...
:)))


 
sniknik ©   (2003-02-22 01:51) [7]

востанавливать цвет с синего на черный если поле поменялось (на соседнее кликнули). убрать скоро все синими станут.


 
Johnmen ©   (2003-02-22 02:02) [8]

Да. Что-то не вполне был внимателен к вопросу...:)


 
Conder   (2003-02-24 11:34) [9]

Спасибо джентльмены!
Код by sniknik круто подмогнул... Все работает и с RestoreDefaults и без добавления колонок в рантайме.
Еще раз спасибо



Страницы: 1 вся ветка

Текущий архив: 2003.03.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
7-54322
Evg12
2003-01-18 13:39
2003.03.17
Уважаемые мастера, Как узнать серийный номер и/или тип материнско


3-53957
SergBBS
2003-02-26 15:22
2003.03.17
обновление данных


6-54137
Ihor Osov'yak
2003-01-25 00:53
2003.03.17
TServerSocket: Read error 998, Неверная попытка доступа к адресу


14-54209
Anatoly Podgoretsky
2003-03-02 07:57
2003.03.17
Катарина с Днем Рождения


1-54051
Andrew H.
2003-03-05 09:28
2003.03.17
Копирование из буфера в Excel2000