• Table1.Database = DBDemos
• Table1.TableName = Customer
• Table1.Active = True
4. Установка Table2
• Table2.Database = DBDemos
• Table2.TableName = Orders
• Table2.Active = True
5. Добавьте все поля для Table1, используя Fields Editor (редактор полей):
• Дважды щелкните на Table1
• Нажмите правую кнопку мыши в редакторе полей
• Выберите пункт Add New Fields. Добавьте их все.
6. Добавьте новое поле для Table1.
• Нажмите правую кнопку мыши в редакторе полей и выберите пункт «New Field».
7. Определите следующие параметры для вновь добавленного поля:
• Name: Bob
• Type: String
• Size: 30
• Select Lookup
• Key Fields: CustNo – Поле в Table1 для хранения значения
• DataSet: Table2 – Здесь устанавливается табличный lookup
• LookUpKeys: CustNo – Данный ключ копируется в KeyField
• Result Field: OrderNo – Значение для показа пользователю в выпадающем списке
8. Запустите приложение
Как зафиксировать один или несколько столбцов в TDBGrid с возможностью навигации по этим столбцам?
Nomadicсоветует:
Это маленькая вставка в Ваш наследник от TCustomDBGrid, которая решает данную задачу.
// DBGRIDEX.PAS
// ----------------------------------------------------------------------------
destructorTDbGridEx.Destroy;
begin
_HideColumnsValues.Free;_HideColumns.Free;
inheritedDestroy;
end;
// ----------------------------------------------------------------------------
constructorTDbGridEx.Create(Component : TComponent);
begin
inheritedCreate(Component);
FFreezeCols := ?;
_HideColumnsValues := TList.Create;
_HideColumns := TList.Create;
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.KeyDown( varKey: Word; Shift: TShiftState);
begin
if(Key = VK_LEFT) thenColBeforeEnter(-1);
if(Key = VK_RIGHT) thenColBeforeEnter(1);
inherited;
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.SetFreezeColor(AColor : TColor);
begin
InvalidateRow(0);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.SetFreezeCols(AFreezeCols : Integer);
begin
FFreezeCols := AFreezeCols;
InvalidateRow(0);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.ColEnter;
begin
ColBeforeEnter(0);
ifAssigned(OnColEnter) thenOnColEnter(Self);
end;
// ----------------------------------------------------------------------------
procedureTDbGridEx.ColBeforeEnter(ADelta : Integer);
varnIndex : Integer;
functionReadWidth : Integer;
vari : Integer;
begin
i := _HideColumns.IndexOf(Columns[nIndex]);
ifi = -1 thenresult := 120
elseresult := Integer(_HideColumnsValues[i]);
end;
procedureSaveWidth;
vari : Integer;
begin
i := _HideColumns.IndexOf(Columns[nIndex]);
ifi <> - 1 then begin
_HideColumnsValues[i] := Pointer(Columns[nIndex].Width);
end else begin
_HideColumns.Add(Columns[nIndex]);
_HideColumnsValues.Add(Pointer(Columns[nIndex].Width));
end;
end;
begin
fornIndex := 0 toColumns.Count - 1 do begin
if(Columns[nIndex].Width = 0) then begin
if(nIndex + 1 <= FreezeCols) or(nIndex >= SelectedIndex + ADelta) then
Columns[nIndex].Width := ReadWidth;
end else begin
SaveWidth;
if(nIndex + 1 > FreezeCols) and(nIndex < SelectedIndex + ADelta) and
(nIndex + 1 < Columns.Count) and(FreezeCols > 0) then
Columns[nIndex].Width := 0;
end;
end;
end;
Dbgrid с цветными ячейками IV
Nomadicсоветует:
Hапример, так:
DefaultDrawing:=False;
….
procedureTfrmCard.GridDrawColumnCell(Sender: TObject; constRect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
var
Index : Integer;
Marked, Selected: Boolean;
begin
Marked := False;
if(dgMultiSelect inGrid.Options) andTHackDBGrid(Grid).Datalink.Active then
Marked:=Grid.SelectedRows.Find(THackDBGrid(Grid).Datalink.Datasource.Dataset.Bookmark, Index);
Selected := THackDBGrid(Grid).Datalink.Active and(Grid.Row-1 = THackDBGrid(Grid).Datalink.ActiveRecord);
ifMarked then begin
Grid.Canvas.Brush.Color:=$DFEFDF;
Grid.Canvas.Font.Color :=clBlack;
end;
ifSelected then begin
Grid.Canvas.Brush.Color:=$FFFBF0;
Grid.Canvas.Font.Color :=clBlack;
ifMarked thenGrid.Canvas.Brush.Color:=$EFE3DF; { $8F8A30 }
Читать дальше