if(DBComboBoxEh1->Text.Length()!=0)
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact”)->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
DBComboBoxEh и DBGridEh
При запуске формы данные из таблицы определённого столбца заносятся в Items DBComboBoxEh'а.
Стоит в DBComboBoxEh выбрать какой-нибудь Item, как он тут же отображается в самой последней пустой (кстати, как её убрать) строчке грида.
Просмотрел все события (думал может влепил когда чего) - всё чисто. Как убрать этот косяк?
И вот ещё что: через тот же DBComboBoxEh в таблицу заносятся данные. Сдела так, что бы они тут же заносились в Items'ы DBComboBoxEh'а. Они заносятся (стоит только перезапустить прогу - сразу всё на месте), но появляется в списке Items'ов только после перезапуска проги. Тут то что?
И вот ещё что: через тот же DBComboBoxEh в таблицу заносятся данные. [/QUOTE]
[QUOTE='Fan][']На форме DBComboBoxEh и DBGridEh.
При запуске формы данные из таблицы определённого столбца заносятся в Items DBComboBoxEh'а.
Стоит в DBComboBoxEh выбрать какой-нибудь Item, как он тут же отображается в самой последней пустой (кстати, как её убрать) строчке грида.
Просмотрел все события (думал может влепил когда чего) - всё чисто. Как убрать этот косяк?
[/QUOTE]
Может чего я не понял - но судя по первой цитате - комбобох ведет себя так как ты от него хочешь - добавляет в таблицу запись. Что именно не так?
[QUOTE='Fan][']
Они заносятся (стоит только перезапустить прогу - сразу всё на месте), но появляется в списке Items'ов только после перезапуска проги. Тут то что?
[/QUOTE]
Выполняй Refresh источника данных.
При добавлении в таблицу данных из DBComboBoxEh:
Код:
происходят странные вещи.
Новые Items в DBComboBoxEh сразу не бобавляются, только после перезапуска программы.
Новый добавленный элемент затирает последний стоящий.
В последней строке DBGridEh (которая всегда пустая) появляется выбранная в DBComboBoxEh запись.
Немного подправил. Теперь получилось вот что:
Код:
if(DBComboBoxEh1->Text.Length()!=0)
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
Table1->First();
while(!Table1->Eof)
{
AnsiString Contact=Table1->FieldByName("Contact")->AsString;
int i=Table1->RecordCount;
if(Table1->RecNo==i-1)
DBComboBoxEh1->Items->Add(Contact);
Table1->Next();
}
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
Table1->First();
while(!Table1->Eof)
{
AnsiString Contact=Table1->FieldByName("Contact")->AsString;
int i=Table1->RecordCount;
if(Table1->RecNo==i-1)
DBComboBoxEh1->Items->Add(Contact);
Table1->Next();
}
Вроде теперь в DBComboBoxEh item'ы появляются сразу, но только через пробел. После рестарта проги пустые item'ы пропадают.
А с DBGridEh ничего так и не получается.
При добавлении в таблицу данных из DBComboBoxEh:
Код:
if(DBComboBoxEh1->Text.Length()!=0)
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact”)->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact”)->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
происходят странные вещи.
Новые Items в DBComboBoxEh сразу не бобавляются, только после перезапуска программы.
Новый добавленный элемент затирает последний стоящий.
В последней строке DBGridEh (которая всегда пустая) появляется выбранная в DBComboBoxEh запись.
Немного подправил. Теперь получилось вот что:
Код:
if(DBComboBoxEh1->Text.Length()!=0)
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
Table1->First();
while(!Table1->Eof)
{
AnsiString Contact=Table1->FieldByName("Contact")->AsString;
int i=Table1->RecordCount;
if(Table1->RecNo==i-1)
DBComboBoxEh1->Items->Add(Contact);
Table1->Next();
}
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
}
DBComboBoxEh1->Items->Add(DBComboBoxEh1->Text);
Table1->First();
while(!Table1->Eof)
{
AnsiString Contact=Table1->FieldByName("Contact")->AsString;
int i=Table1->RecordCount;
if(Table1->RecNo==i-1)
DBComboBoxEh1->Items->Add(Contact);
Table1->Next();
}
Вроде теперь в DBComboBoxEh item'ы появляются сразу, но только через пробел. После рестарта проги пустые item'ы пропадают.
А с DBGridEh ничего так и не получается.[/QUOTE]
Хм. Не очень понятно зачем такие сложности.
Почему нельзя так:
Код:
if(DBComboBoxEh1->Text.Length()!=0)
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
Table1->Post();
Table1->Last();//На всякий случай :)
DBComboBoxEh1->Items->Add(Table1->FieldByName("Contact")->AsString);
}
{
Table1->Edit();
Table1->Append();
Table1->FieldByName("Contact")->AsString=DBComboBoxEh1->Text;
Table1->Post();
Table1->Last();//На всякий случай :)
DBComboBoxEh1->Items->Add(Table1->FieldByName("Contact")->AsString);
}
Я могу конечно ошибаться, компоненты типа ТTable я вобще практически не использую, но результат должен быть тот что ты хочешь.
происходят странные вещи.
Новые Items в DBComboBoxEh сразу не бобавляются, только после перезапуска программы.
Новый добавленный элемент затирает последний стоящий.
В последней строке DBGridEh (которая всегда пустая) появляется выбранная в DBComboBoxEh запись.[/QUOTE]
Насколько я понял из бормотания, стоит примерно следующая задача:
- в гриде отображается нечто прикладное
- при помощи комбинированного списка должна делаться то ли подстановка, то ли фильтрация данных грида
- список подстановки/фильтрации редактируется по ходу пьесы
- изменения должны отображаться без повторного открытия окна
Решение задачи следующее:
- Если требуется подстановка значений, выкидываем DBComboBoxEh, вместо этого создаем lookup-поля в таблице - они автоматом станут комбинированными списками в гриде. Для редактирования справочника лепим на место DBComboBoxEh кнопку, вызывающую окно редактирования справочника (окно создаем отдельно).
- Если требуется фильтрация, заменяем DBComboBoxEh на DBLookupComboBoxEh. DataSource и DataField оставляем пустыми, вместо этого устанавливаем значения ListSource, KeyFields и ListFields. Сама фильтрация делается или через MasterSource/MasterField (если поддерживается - не помню) или ручной установкой фильтра и/или параметров запроса для набора данных в гриде и его обновлением. Обработчик для изменения фильтра вешается на AfterScroll набора данных справочника.
- в гриде отображается нечто прикладное
- при помощи комбинированного списка должна делаться то ли подстановка, то ли фильтрация данных грида
...
[/QUOTE]
Мне честно говоря вобще трудно представить задачу, которую можно решать таким способом :) Зачем поле фильтра добавлять в таблицу? Если это подстановка - то почему запись добавляется а не обновляется? Если это попытка добавлять данные в справочник - тогда почему нет проверки на уникальность? Ну и так далее. Может это попытка сделать типа MRU? Хз.
Но то что у них общий датасет - думаю догадка 100%. По крайней мере я исходил из этого.
А зачем ставить общий DataSource? По-моему, это все объясняет.