Разработка баз данных в Delphi. 11 Уроков



         

 Управление TDBGrid во время выполнения - часть 3


procedure TForm1.FormCreate(Sender: TObject);

var

  i : Word;

  R : Array[0..49] of TCheckBox;

begin

  {Fill ListBox}

  ListBox1.Clear;

  for i:=0 to Table1.FieldCount-1 do

    ListBox1.Items.Add(Table1.Fields[i].FieldName);

  {Make CheckBoxes}

  for i:=0 to Table1.FieldCount-1 do begin

   R[I] := TCheckBox.Create(Self);

   R[I].Parent := ScrollBox1;

   R[I].Caption := Table1.Fields[i].FieldName;

   R[I].Left := 10;

   R[I].Top := I * CheckBox1.Height + 5;

   R[I].Width := 200;

   R[I].Checked := True;

   R[I].OnClick := ChBClick;

  end;

end;

Большая часть кода в этом примере выполняет относительно простые задачи, типа назначения имен и положений check boxes. Вот две ключевых строки:

  R[I] := TCheckBox.Create(Self);

  R[I].Parent := ScrollBox1;

Первая строки создает CheckBox с заданным Owner (Владельцем). Вторая строки назначает Parent (Родителя) для CheckBox. Чтобы понять различия между Родителем и Владельцем, посмотрите соответствующие свойства в online-help.

          Программа содержит ListBox, который показывает текущий порядок полей в DataSet. Для изменения порядка полей в DataSet (а, следовательно, в DBGrid) используются две кнопки. При нажатии на одну из кнопок, выбранное в ListBox’е поле перемещается на одну позицию вверх или вниз. Синхронно с этим меняется и порядок полей в DBGrid. Код, показанный ниже, изменяет Index поля для Table1, изменяя, таким образом, позицию поля в DBGrid. Эти изменения касаются только визуального представления DataSet. Физически данные на  диске не изменяются.

procedure TForm1.downButtonClick(Sender: TObject);

var

  i : Integer;

begin

  with ListBox1 do

  if (ItemIndex<Items.Count-1)and(ItemIndex<>-1) then begin

    i := ItemIndex;

    {move ListBox item}

    Items.Move(i, i+1);

    ItemIndex := i+1;

    {move Field}

    Table1.Fields[i].Index:=i+1;

  end;

end;

Последняя строка в примере как раз та, которая фактически изменяет индекс колонки, которую пользователь хочет переместить. Две строки кода непосредственно перед ней перемещают текущую строку в ListBox на новую позицию.




Содержание  Назад  Вперед