Главная страница
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.026 c
14-54220
Style
2003-03-03 14:32
2003.03.17
Тут новогодню песню на Delphi коришь написал :)


3-53847
phantom2040
2003-02-25 16:26
2003.03.17
Вопроc по SQL


1-54074
Programist
2003-03-04 16:06
2003.03.17
По потокам (Thread)


9-53835
VitGun
2002-10-17 18:10
2003.03.17
GLScene


1-54085
star.ru
2003-03-05 14:23
2003.03.17
RichEdit