Nevron .NET Vision Documentation
Data Import - Getting Started

It is often required to represent the relationships and data of a tabular data source as a diagram. The most common scenario is when the data relationships form tree or graph data structures and the data records involved in these relationships need to be displayed as cards, with entries for each particular data field. Nevron Diagram for .NET features built-in the NTreeDataSourceImporter and NGraphDataSourceImporter classes, which can help you perform these tedious operations.

Sample Dataset

For the purpose of explaining data import, lets assume that we have a simple dataset, which contains two table: Pages and Links. 

Pages table
Field Type Comments
Id Auto Number page id
ParentId Number id to the parent page
Title string page title
URL Hyper link page URL
Links table
Field Type Comments
Id Auto Number link id
FromPageId Number id of the the source page
ToPageId Number id of the the destination page

The Pages table contains information about the pages and the hierarchical structure of a website. The Links table contains information about the cross links inside this website.

The Pages table is a self-referencing table the records of which can be displayed as a tree - we will use the NTreeDataSourceImporter to do that.

The Pages and Links tables can be displayed as a graph the vertices of which are pages and the edges of which are page links - we will use the NGraphDataSourceImporter to perform this task.

Common Data Import Features

Both the NTreeDataSourceImporter and the NGraphDataSourceImporter classes derive from the base NDataSourceImporter class, which defines their common functionality:

Supported Data Sources

Data importers support the following types of data sources:

Type Comments
DataTable
DataView
OleDbDataAdapter Uses the SelectCommand of the adapter
SqlDataAdapter Uses the SelectCommand of the adapter
OdbcDataAdapter Uses the SelectCommand of the adapter
OleDbCommand
SqlCommand
OdbcCommand

Vertex and Edge Shapes Factories

Since both tree and graphs structures are represented by shapes for their vertices and edges, you can use the VertexShapesFactory and EdgeShapesFactory properties to specify an instance of the INShapesFactory interface responsible for creating vertex and edge shapes respectively. The INShapesFactory interface is implemented by all shape factories shipped with Nevron Diagram. The name of the vertex or edge shape, which needs to be created is specified by the VertexShapeName and EdgeShapeName properties respectively.

It is mandatory to specify a VertexShapesFactory and a VertexShapeName. If you do not specify an EdgeShapesFactory, by default the diagram will create NRoutableConnector instances for all imported edges.

Callbacks

Provided are the following events, which the data source importers will raise to notify you about their progress:

Event Description
ImportStarted raised when the import operation has started
VertexImported raised when the data source importer has created a vertex shape for a data record. You will typically subscribe to this event to fill the vertex shape with data record information.
EdgeImported raised when the data source importer has created an edge shape for a data record.
ImportSucceeded raised when the import has finished successfully.
ImportFailed raised if the import failed.
Tree Data Import

To perform tree data import you need a single data source. You also need to specify the Id column (must uniquely identify the records in the data source) and a ParentId column (which specifies the parent record for a given record).

The following code sample perform a tree data import, from an OleDbAdapter, assuming that it selects the Pages table described above:

C#
Copy Code
...

// create the tree data source importer
treeImporter = new NTreeDataSourceImporter();

// set the document in the active layer of which the shapes will be imported
treeImporter.Document = document; 

// set the data source
// NOTE: In this example we assume the that oleDbDataAdapter1 selects the Pages table described above
treeImporter.DataSource = oleDbDataAdapter1;

// records are uniquely identified by their Id column
// records link to their parent record by their ParentId column
treeImporter.IdColumnName = "Id";
treeImporter.ParentIdColumnName = "ParentId";

// create vertices as rectangles shapes
NBasicShapesFactory shapesFactory = new NBasicShapesFactory();
treeImporter.VertexShapesFactory = shapesFactory;
treeImporter.VertexShapesName = BasicShapes.Rectangle.ToString();
 
// use layered tree layout
NLayeredTreeLayout layout = new NLayeredTreeLayout();
layout.Direction = LayoutDirection.LeftToRight;
layout.OrthogonalEdgeRouting = true;
layout.LayerAlignment = RelativeAlignment.Near;
treeImporter.Layout = layout;

// subscribe for the vertex imported event,
// which is raised when a shape was created for a data source record
treeImporter.VertexImported += new ShapeImportedDelegate(OnVertexImported);

// import
treeImporter.Import();

...

private void OnVertexImported(NDataSourceImporter importer, NShape shape, INDataRecord dataRecord)
{
    // display the page title in the shape
    object text = dataRecord.GetColumnValue("Title");
    if (text == null)
    {
        shape.Text = "Title not specified";
    }
    else
    {
        shape.Text = text.ToString();
    }
    shape.SizeToText(new NMarginsF(10));
    // make the URL a tooltip of the shape
    object url = dataRecord.GetColumnValue("URL");
    if (url == null || url.ToString().Length == 0)
    {
       shape.Style.InteractivityStyle = new NInteractivityStyle("URL not specified");
    }
    else
    {
        shape.Style.InteractivityStyle = new NInteractivityStyle(url.ToString());
    }
}
VB.NET
Copy Code
...

' create the tree data source importer
treeImporter = New NTreeDataSourceImporter()

' set the document in the active layer of which the shapes will be imported
treeImporter.Document = document

' set the data source
' NOTE: In this example we assume the that oleDbDataAdapter1 selects the Pages table described above
treeImporter.DataSource = oleDbDataAdapter1

' records are uniquely identified by their Id column
' records link to their parent record by their ParentId column
treeImporter.IdColumnName = "Id"
treeImporter.ParentIdColumnName = "ParentId"

' create vertices as rectangles shapes
Dim shapesFactory As New NBasicShapesFactory()
treeImporter.VertexShapesFactory = shapesFactory
treeImporter.VertexShapesName = BasicShapes.Rectangle.ToString()

' use layered tree layout
Dim layout As New NLayeredTreeLayout()
layout.Direction = LayoutDirection.LeftToRight
layout.OrthogonalEdgeRouting = True
layout.LayerAlignment = RelativeAlignment.Near
treeImporter.Layout = layout

' subscribe for the vertex imported event,
' which is raised when a shape was created for a data source record
AddHandler treeImporter.VertexImported, AddressOf OnVertexImported

' import
treeImporter.Import()

...

Private Sub OnVertexImported(ByVal importer As NDataSourceImporter, ByVal shape As NShape, ByVal dataRecord As INDataRecord)
    ' display the page title in the shape
    Dim text As Object = dataRecord.GetColumnValue("Title")
    If text Is Nothing Then
        shape.Text = "Title not specified"
    Else
        shape.Text = text.ToString()
    End If

    shape.SizeToText(New NMarginsF(10))

    ' make the URL a tooltip of the shape
    Dim url As Object = dataRecord.GetColumnValue("URL")
    If url Is Nothing Or url.ToString().Length = 0 Then
        shape.Style.InteractivityStyle = New NInteractivityStyle("URL not specified")
    Else
        shape.Style.InteractivityStyle = New NInteractivityStyle(url.ToString())
    End If
End Sub
Graph Data Import

To perform graph data import you need a two data sources. The first data source must contain the vertex records, while the second data source must contain the edge records. You also need to specify the Id column in vertex data source (must uniquely identify the records in it), as well as specify the FromId and ToId columns in the edges data source, which define the from and to vertex records.

The following code sample perform a graph data import, from two OleDbAdapters, assuming that they selects the Pages and Links tables described above:

C#
Copy Code
// configure the graph data source importer
graphImporter = new NGraphDataSourceImporter();

// set the document in the active layer of which the shapes will be imported
graphImporter.Document = document; 

// set the data source
// NOTE: In this example we assume the that PagesDataAdapter selects the Pages table
// while the LinksDataAdapter selects the Links table
graphImporter.VertexDataSource = PagesDataAdapter;
graphImporter.EdgeDataSource = LinksDataAdapter;

// vertex records are uniquely identified by their Id (in the Pages table)
// edges link the vertices with the FromPageId and ToPageId (in the Links table)
graphImporter.VertexIdColumnName = "Id";
graphImporter.FromVertexIdColumnName = "FromPageId";
graphImporter.ToVertexIdColumnName = "ToPageId";

// create vertices as rectangle shapes
NBasicShapesFactory shapesFactory = new NBasicShapesFactory();
graphImporter.VertexShapesFactory = shapesFactory;
graphImporter.VertexShapesName = BasicShapes.Rectangle.ToString();

// use layered graph layout NLayeredGraphLayout
layout = new NLayeredGraphLayout();
layout.Direction = LayoutDirection.LeftToRight;
layout.LayerAlignment = RelativeAlignment.Near;
graphImporter.Layout = layout;

// subscribe for the vertex imported event,
// which is raised when a shape was created for a data source record
graphImporter.VertexImported += new ShapeImportedDelegate(OnVertexImported);

// import
graphImporter.Import();
...


private void OnVertexImported(NDataSourceImporter importer, NShape shape, INDataRecord dataRecord)
{
    // display the page title in the shape
    object text = dataRecord.GetColumnValue("Title");
    if (text == null)
    {
        shape.Text = "Title not specified";
    }
    else
    {
        shape.Text = text.ToString();
    }
    shape.SizeToText(new NMarginsF(10));  

    // make the URL a tooltip of the shape
    object url = dataRecord.GetColumnValue("URL");
    if (url == null || url.ToString().Length == 0)
    {
       shape.Style.InteractivityStyle = new NInteractivityStyle("URL not specified");
    }
    else
    {
        shape.Style.InteractivityStyle = new NInteractivityStyle(url.ToString());
    }
}
VB.NET
Copy Code
' configure the graph data source importer
graphImporter = New NGraphDataSourceImporter()

' set the document in the active layer of which the shapes will be imported
graphImporter.Document = document

' set the data source
' NOTE: In this example we assume the that PagesDataAdapter selects the Pages table
' while the LinksDataAdapter selects the Links table
graphImporter.VertexDataSource = PagesDataAdapter
graphImporter.EdgeDataSource = LinksDataAdapter

' vertex records are uniquely identified by their Id (in the Pages table)
' edges link the vertices with the FromPageId and ToPageId (in the Links table)graphImporter.VertexIdColumnName = "Id"
graphImporter.FromVertexIdColumnName = "FromPageId"
graphImporter.ToVertexIdColumnName = "ToPageId"

' create vertices as rectangle shapes
Dim shapesFactory As New NBasicShapesFactory()
graphImporter.VertexShapesFactory = shapesFactory
graphImporter.VertexShapesName = BasicShapes.Rectangle.ToString()

' use layered graph layout NLayeredGraphLayout layout = New NLayeredGraphLayout()
layout.Direction = LayoutDirection.LeftToRight
layout.LayerAlignment = RelativeAlignment.Near
graphImporter.Layout = layout

' subscribe for the vertex imported event,
' which is raised when a shape was created for a data source record
AddHandler graphImporter.VertexImported, AddressOf OnVertexImported

' import
graphImporter.Import()

...

Private Sub OnVertexImported(ByVal importer As NDataSourceImporter, ByVal shape As NShape, ByVal dataRecord As INDataRecord)
    ' display the page title in the shape
    Dim text As Object = dataRecord.GetColumnValue("Title")
    If text Is Nothing Then
        shape.Text = "Title not specified"
    Else
        shape.Text = text.ToString()
    End If

    shape.SizeToText(New NMarginsF(10))

    ' make the URL a tooltip of the shape
    Dim url As Object = dataRecord.GetColumnValue("URL")
    If url Is Nothing Or url.ToString().Length = 0 Then
        shape.Style.InteractivityStyle = New NInteractivityStyle("URL not specified")
    Else
        shape.Style.InteractivityStyle = New NInteractivityStyle(url.ToString())
    End If
End Sub
Related Examples

Windows Forms: Data Import Folder
Web Forms: Data Import Folder

 

 


©2017. Nevron Software LLC.

Send Feedback