Главная страница
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.019 c
1-54048
Demonist
2003-03-05 00:05
2003.03.17
Av


3-53845
Yasha
2003-02-26 19:18
2003.03.17
копирование данных


1-54015
Jaguar
2003-03-06 19:52
2003.03.17
Есть ли в Паскале/Delphi следующие операции...


1-54081
Иванов Сергей
2003-03-04 22:35
2003.03.17
как создать панель типа таскбара


3-53904
Pat
2003-02-23 12:06
2003.03.17
Опять Access