Цитата:
Сообщение от DenSarych
В вашем случае, скорее всего, ничего не даст. Вы спрашиваете "как сделать", но, не описываете ни "зачем это нужно", ни "общей задумки", ни "общего подхода". А поскольку вы стоите программу на основе "советов из интернета" (каждый из которых по-своему правильный, но в общем-то несовместим с любым другим), то в результате и получите "лоскутное одеяло", набор кусков кода, а не цельную, работоспособную программу.
Вы опишите "что вы хотите получить в конечном итоге". Может - "форму ввода значений", или "пару форм раздельного отображения и редактирования данных", или "небольшую программку учёта, работающую с БД"?
Добавление значений (id, Name), т.е. "id записи в таблице и строки" в ComboBox:
Код:
procedure TfvMain.btnAddClick(Sender: TObject);
var i, n :integer;
begin
//заполним ComboBox значениями
ComboBox1.Items.Clear;
with Query1 do
begin
Open;
for i := 1 to RecordCount do
begin
ComboBox1.Items.AddObject(
FieldByName('Name').AsString,
TObject(FieldByName('Id').AsInteger)
);
Next;
end;
Close;
ComboBox1.Text := '';
end;
end;
Изменение значений в ComboBox:
Код:
procedure TfvMain.btnDelClick(Sender: TObject);
procedure ComboBox1_DelId ( cId :integer);
var i :integer;
begin
with ComboBox1.Items do
for i := 0 to Count -1 do
if Integer(Objects[i]) = cId
then begin
Delete(i);
Break;
end;
end;
begin
//Изменим значения ComboBox
// 1 вариант (рекомендуемый):
// Очистить ComboBox1.Items: ComboBox1.Items.Clear;
// Загрузить все данные из Query
// 2 вариант (удаление единственного значения по id):
ComboBox1_DelId(StrToInt(edValueId.Text));
end;
Получение значений id из ComboBox:
Код:
procedure TfvMain.ComboBox1Change(Sender: TObject);
begin
//Посмотрим, какие значения Name и Id находятся в ComboBox1
with (Sender as TComboBox) do
begin
ShowMessage('Name = '+Items.Strings[ItemIndex] +', Id = ' +
IntToStr(Integer(Items.Objects[ItemIndex])))
end;
end;
|
Алгоритм подразумевался такой сначала вводится текстовое имя проекта через комбобокс и вводятся исходные данные, далее происходит расчет получаются результирующие данные. Таким образом одному проекту соответствуют исходные данные и результат. Проекты хранятся в таблице с двумя полями id и имя проектов. И если надо удалить проект из таблицы то по кнопке запись удаляется из дбгрида (дбгрид для контроля сколько проектов в таблице), а вместе с ним должна удалиться и его отображение в комбобокс.
по коду
Код:
var
Idx : Integer;
begin
DeletedProjectName := ComboBox1.Text;
...
Idx := ComboBox1.Items.IndexOf(DeletedProjectName);
If Idx > -1 Then
Begin
ComboBox1.Items.Delete(Idx);
ComboBox1.Text := '';
End;
end;
удаляется запись из комбобокс (и запись в дбгриде т.к по нажатию на кнопку и выбранной записи в комбокс становиться соответствующая текущая запись в дб гриде). Но как удалить из комбобокс имя проекта, просто выбрав проект в дбгриде?
Т.к если в первом случае если выбрав в комбобоксе нужный проект в дбгриде становилось текущая нужная запись, то при выборе в ручную в дбгриде в комбоксе удаляется уже запись которая не соответствует выбранной в дбгриде.