![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание столбцов в ;DBGrid в рантайме [D5, D6, D7, Access]
Conder © (2003-02-21 16:45:00)Имеется 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;
- при щелчке на заголовке в гриде ничего не отображается
чем лечить?
Conder (2003-02-24 11:34:00) [1]Спасибо джентльмены!
Код by sniknik круто подмогнул... Все работает и с RestoreDefaults и без добавления колонок в рантайме.
Еще раз спасибо
Johnmen (2003-02-22 02:02:00) [2]Да. Что-то не вполне был внимателен к вопросу...:)
sniknik (2003-02-22 01:51:00) [3]востанавливать цвет с синего на черный если поле поменялось (на соседнее кликнули). убрать скоро все синими станут.
Johnmen (2003-02-22 01:45:00) [4]>sniknik © (22.02.03 01:34)
Ну не понимаю я смысла применения ни DBGrid1.Columns.RestoreDefaults; ни приведенного тобой...
:)))
sniknik (2003-02-22 01:34:00) [5]1 не лишнее. но поменять на чтонибудь типа
for i:= 0 to DBGrid1.Columns.Count-1 do DBGrid1.Columns[i].Title.Font.Color:= clBlack;
не помешает.
2 да, так лутше.
Johnmen (2003-02-22 00:04:00) [6]1. DBGrid1.Columns.RestoreDefaults; по-моему, лишнее...
2. if Column.Field = nil then exit;
sniknik (2003-02-21 17:41:00) [7]ошибся на пустую структуру кажет (значит ресторедефаулт с пустой не работает), ну можно тогда добавить и без всяких проверок обойтись
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
if Column.FieldName = "" then exit;
ADODataSet1.Sort:= Column.FieldName;
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color:= clBlue;
end;
sniknik (2003-02-21 17:36:00) [8]не там проблему ищеш.
достаточно следующего кода.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
ADOQuery1.Sort:= Column.FieldName;
DBGrid1.Columns.RestoreDefaults;
Column.Title.Font.Color:= clBlue;
end;
+ проверки на открытость датасета и т.д. если хочется.
(вылетает потому что рекордсет закрыт поля не уже не существуют ссылка по Column хрен знает куда указывает)
Соловьев (2003-02-21 16:48:00) [9]
> Column.Title.Font.Color := clBlue; <-- здесь вылетает ошибка
>
Вообще-то нужно указать владельца Column...