Here some incomplete code that links a NxDbInspector to a NxDbGrid's DataSet and populates the inspector with items by exemining the DataSets fields.
CODE
procedure TForm1.ActivateGrid(const DbGrid: TNextDBGrid; const DbInspector: TNextDBInspector; const Root: string);
var
i : Integer;
ct : string;
rootItem : string;
NxI : TNxCustomPropertyItem;
begin
rootItem := root + 'Item';
DbInspector.Categories.Add(TNxTextItem, root).Name := rootItem;
for i := 0 to Pred(DbGrid.DataSource.DataSet.FieldCount) do
begin
fc := DbGrid.DataSource.DataSet.FieldDefs[i].FieldClass;
Nxi := nil;
if (fc.ClassNameIs(TNumericField.ClassName) or
fc.ClassNameIs(TAutoIncField.ClassName) or
fc.ClassNameIs(TIntegerField.ClassName) or //Min/Max
fc.ClassNameIs(TWordField.ClassName) or
fc.ClassNameIs(TLargeintField.ClassName) or
fc.ClassNameIs(TSmallintField.ClassName) or
fc.ClassNameIs(TIntegerField.ClassName) or
fc.ClassNameIs(TBCDField.ClassName) or //Precision
fc.ClassNameIs(TFMTBCDField) or
fc.ClassNameIs(TCurrencyField.ClassName) or //Precision
fc.ClassNameIs(TFloatField.ClassName)) then //Precision
begin
if not IsPublishedProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Precision') then
begin
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbSpinItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
end
else
begin
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbSpinItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
//Set Precision too...
end;
(NxI as TNxDbSpinItem).Max := GetOrdProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Max');
(NxI as TNxDbSpinItem).Min := GetOrdProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Min');
end
else if (fc.ClassNameIs(TStringField.ClassName) or
fc.ClassNameIs(TWideStringField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbTextItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TDateTimeField.ClassName) or
fc.ClassNameIs(TTimeField.ClassName) or
fc.ClassNameIs(TDateField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbDateItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TBooleanField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbCheckBoxItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TMemoField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDBMemoItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
{----Todo:
TSQLTimeStampField
TBinaryField
TBytesField
TVarBytesField
TGraphicField
TBlobField
TObjectField
TADTField
TArrayField
TDataSetField
TReferenceField
TVariantField
TInterfaceField
TIDispatchField
TGuidField
TAggregateField
}
if Assigned(NxI) then
begin
NxI.FieldName := DbGrid.DataSource.DataSet.FieldDefs[i].Name;
NxI.Enabled := not fc.ClassNameIs(TAutoIncField.ClassName);
end;
// DBGrid.DataSource.DataSet.RecNo := 1;
end;
end;
var
i : Integer;
ct : string;
rootItem : string;
NxI : TNxCustomPropertyItem;
begin
rootItem := root + 'Item';
DbInspector.Categories.Add(TNxTextItem, root).Name := rootItem;
for i := 0 to Pred(DbGrid.DataSource.DataSet.FieldCount) do
begin
fc := DbGrid.DataSource.DataSet.FieldDefs[i].FieldClass;
Nxi := nil;
if (fc.ClassNameIs(TNumericField.ClassName) or
fc.ClassNameIs(TAutoIncField.ClassName) or
fc.ClassNameIs(TIntegerField.ClassName) or //Min/Max
fc.ClassNameIs(TWordField.ClassName) or
fc.ClassNameIs(TLargeintField.ClassName) or
fc.ClassNameIs(TSmallintField.ClassName) or
fc.ClassNameIs(TIntegerField.ClassName) or
fc.ClassNameIs(TBCDField.ClassName) or //Precision
fc.ClassNameIs(TFMTBCDField) or
fc.ClassNameIs(TCurrencyField.ClassName) or //Precision
fc.ClassNameIs(TFloatField.ClassName)) then //Precision
begin
if not IsPublishedProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Precision') then
begin
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbSpinItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
end
else
begin
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbSpinItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
//Set Precision too...
end;
(NxI as TNxDbSpinItem).Max := GetOrdProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Max');
(NxI as TNxDbSpinItem).Min := GetOrdProp(DbGrid.DataSource.DataSet.FieldDefs[i], 'Min');
end
else if (fc.ClassNameIs(TStringField.ClassName) or
fc.ClassNameIs(TWideStringField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbTextItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TDateTimeField.ClassName) or
fc.ClassNameIs(TTimeField.ClassName) or
fc.ClassNameIs(TDateField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbDateItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TBooleanField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDbCheckBoxItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name)
else if (fc.ClassNameIs(TMemoField.ClassName)) then
NxI := DbInspector.Categories.ItemByName[rootItem].Items.Add(TNxDBMemoItem, DbGrid.DataSource.DataSet.FieldDefs[i].Name);
{----Todo:
TSQLTimeStampField
TBinaryField
TBytesField
TVarBytesField
TGraphicField
TBlobField
TObjectField
TADTField
TArrayField
TDataSetField
TReferenceField
TVariantField
TInterfaceField
TIDispatchField
TGuidField
TAggregateField
}
if Assigned(NxI) then
begin
NxI.FieldName := DbGrid.DataSource.DataSet.FieldDefs[i].Name;
NxI.Enabled := not fc.ClassNameIs(TAutoIncField.ClassName);
end;
// DBGrid.DataSource.DataSet.RecNo := 1;
end;
end;