Jump to content


Photo

Automatically Link NxDbInspector with a DataSet


  • Please log in to reply
No replies to this topic

#1 wvd_vegt

wvd_vegt

    Master Member

  • Honorable Members
  • PipPipPipPipPip
  • 710 posts
  • Gender:Male
  • Location:the Netherlands

Posted 23 March 2006 - 02:23 PM

Hi,

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;

G.W. van der Vegt




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users