Grid / Data Binding and Column Generation
In This Topic
    Data Binding and Column Generation
    In This Topic
     Binding the Grid To Data

    To bind the grid to data you need to set its DataSource property like in the following example:

    Binding the Grid to a Data Source
    Copy Code
    // create a data table with two fields
    NMemoryDataTable dataTable = new NMemoryDataTable(
        new NFieldInfo("Name", typeof(string)),
        new NFieldInfo("Birthday", typeof(DateTime)));
               
    // fill the data table
    dataTable.AddRow("George", new DateTime(1976, 12, 19));
    dataTable.AddRow("Andrew", new DateTime(1982, 9, 27));
    // create a view and get its grid
    NTableGridView view = new NTableGridView();
    NTableGrid grid = view.Grid;
    // bind the grid to data
    grid.DataSource = new NDataSource(dataTable);
    

    As discussed in the Data Sources topic, a data source is an attribute that aggregates a data table. Data tables help you define data in-memory (NMemoryDataTable) or bind to different collections of objects as summarized by the following table:

    Data Tables for binding to Object Collections
    Binding Interface Data Table Type
    IList NIListDataTable
    IEnumerable NIEnumerableDataTable
    IList<> NGenericIListDataTable
    IEnumerable<> NGenericIEnumerableDataTable
    INCollection<> NGenericINCollectionDataTable
    INIterable<> NGenericINIterableDataTable

    Additionally specific NOV hosts can even extend the types of objects that you represent as NDataTable with platform specific adaptations. For example hosts where the System.Data.DataTable is defined, can create a certain type of NDataTable that can wrap around a System.Data.DataTable. See the Data Tables topic for more info.

     Automatic Column Creation

    When you set the DataSource property, the grid automatically creates a column for each field of the data source, if the AutoCreateColumns property is set to true. During the automatic column creation, the grid raises the AutoCreateColumn event, that lets you modify the automatically created column for a certain data source field, or prevent the creation of columns for certain fields. For example:

    Handling AutoCreateColumn event
    Copy Code
    // bind the grid to the data source, but exclude the "PersonId" column.
    grid.AutoCreateColumn += delegate(NAutoCreateColumnEventArgs arg)
    {
        switch (arg.FieldInfo.Name)
        {
            case "Name":
                // do not create a column for the Name field.
                arg.DataColumn = null;
                break;
            case "Birthday":
                // change the Birthday column cells background
                arg.DataColumn.Format.BackgroundFill = new NColorFill(NColor.LightBlue);
                break;
            default:
                break;
        }
    };
    // bind the grid to data
    grid.AutoCreateColumns = true;
    grid.DataSource = new NDataSource(dataTable);
    

    Note that the automatic column generation produces data columns (instances of the NDataColumn class).

     Manual Column Creation

    Sometimes you may want to explicitly create the columns of the grid. In this case you can turn off the automatic column creation and manually add the columns you want, like this:

    Manual Column Creation
    Copy Code
    // turn off automatic column generation and bind to the data source
    grid.AutoCreateColumns = false;
    grid.DataSource = new NDataSource(dataTable);
    // create a data column that is bound to the Birthday field
    NDataColumn birthdayColumn = new NDataColumn();
    birthdayColumn.Bind(grid.DataSource, "Birthday");
    grid.Columns.Add(birthdayColumn);
    // create a data column that is bound to the Name field
    NDataColumn nameColumn = new NDataColumn();
    nameColumn.Bind(grid.DataSource, "Name");
    grid.Columns.Add(nameColumn);
    

    As demonstrated by the example the binding of a data column to a specific data source field is achieved by the Bind method.