Home

The Columns of a Table

 

Introduction to Columns

We have defined a column as a technique categorizing some values that belong to a table. Based on this, one category from a list of a video application can be made of video titles. Another category can contain the years the videos were released. Yet another category can contain a number used to identify the format of the video. Here is an example:

Video Title Director Year Length Format Rating
A Few Good Men Rob Reiner 1992 138 Minutes 1 R
The Distinguished Gentleman Jonathan Lynn   112 Minutes 2 R
The Lady Killers Joel Coen & Ethan Coen   104 Minutes 2 R
Fatal Attraction Adrian Lyne 1987 120 Minutes 1 R
Her Alibi Bruce Beresford 1989 94 Minutes 2 PG-13
The Manchurian Candidate Jonathan Demme 2004 129 Minutes 2 R

The string on top of each column allows the user to identify what that column is used for. That string is called the column header. The columns of a table are stored in a property called Columns of the DataTable class. The Columns property is an object of type DataColumnCollection. The DataColumnCollection class provides everything that is necessary to create and manage any column. The DataColumnCollection class is in fact a collection of objects.

Columns Names

A column of a table is an object of type DataColumn. Therefore, to create a column, you can first declare a pointer to DataColumn. The DataColumn class is equipped with five constructors. The default constructor allows you to create a column without more details. Here is an example:

System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 DataColumn *colCategoryID = new DataColumn;

}

If you are planning to reference a column from more than one method or event, you should declare it globally, in the class of the form. Here is an example:

private:

	DataColumn *colCategory;	





System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 colCategory = new DataColumn;

}

};

}		

To distinguish them, each column must have a specific and unique name. The name of a column allows you and the compiler to identify a particular column. The name must follow the rules of variables in C++. To specify the object name of a column, when creating it, you can use the second constructor whose syntax is:

public: DataColumn(String* name);

This constructor expects as argument the name of the column. Here is an example:

System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{			

	 colCategory = new DataColumn(S"Category");

}

If you have already declared a DataColumn object, to specify or change its name, assign the desired string to the DataColumn::ColumnName property. Based on these descriptions, the minimum information needed to create a column is a name. If you don't specify a name, a default name is assigned to the new column.

Adding a Column to a Table

To make a column part of a table, you must add it to the table's collection of columns. As mentioned earlier, the columns of a table are grouped into the DataTable::Columns property, which is based on the DataColumnCollection class. This class is equipped with an Add() method that allows you to add a column to the table.

The DataColumnCollection::Add() method is overloaded with 3 versions. The first version uses the following syntax:

public: virtual DataColumn* Add();

When called, this would create a new column and return it. The compiler would assign a default name to the column. If this is the first column, it would be named Column1. If it is the second column, it would be named Column2, and so on. You can still specify or change the name of a column created with the above version. To do this, assign the desired string to the DataColumn::ColumnName. Here is an example:

private:

	DataSet *dsVideoCollection;



	DataTable *dtDirectors;

	DataColumn *colDirector;	





System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");



	 dtDirectors = new DataTable();

	 dtDirectors->TableName = S"Directors";

	 colDirector = dtDirectors->Columns->Add();

	 colDirector->ColumnName = S"Director";



	 dsVideoCollection->Tables->Add(dtDirectors);

}

If you want to specify the name of the new column when calling the DataColumnCollection::Add() method, use the following version:

public: virtual DataColumn* Add(String *name);

This method takes as argument the name of the new column and returns that new column. Here is an example:

private:

	DataSet *dsVideoCollection;



	DataTable *dtDirectors;

	DataColumn *colDirector;	





System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");



			

	 dtDirectors = new DataTable(S"Directors");

	 colDirector = new DataColum();

	 colDirector->ColumnName = S"Director";

	 colDirector = dtDirector->Columns->Add("Director");

	dsVideoCollection->Tables->Add(dtDirectors);			 

}

If you have already formally created a DataColumn object, to add it to the collection of columns of a table, call the following version of the DataColumnCollection::Add() method:

public: virtual void* Add(DataColumn *name);

This method expects a DataColumn object as argument. You can either primarily create a DataColumn value or you can define one in the parentheses of the method. Here are two examples:

private:

	DataSet *dsVideoCollection;



	DataTable *dtVideos;

	DataColumn *colVideo;	





System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");

	 

	 dtVideos = new DataTable(S"ListOfVideos");

	 colVideo = new DataColumn(S"Title");

	 dtVideos->Columns->Add(colVideo);

	 dtVideos->Columns->Add(new DataColumn(S"Director"));

	 dsVideoCollection->Tables->Add(dtVideos);

}

An Array of Columns

Instead of adding one column (at a time) to a table, you can first create an array of columns and add that array to the collection of columns. To do this, you can call the DataColumnCollection::AddRange() method. Its syntax is:

public: void AddRange(DataColumn*columns[]);

This method takes as argument an array of predefined columns. Here is an example:

private:

	DataSet *dsVideoCollection;



	DataTable *dtVideos;

	static DataColumn *colVideos __gc[] = __gc new DataColumn*[7];

				 

	. . . No Change





System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");



	 dtVideos = new DataTable(S"Videos");

		

	 colVideos[0] = new DataColumn(S"Title");

	 colVideos[1] = new DataColumn(S"Director");

	 colVideos[2] = new DataColumn(S"YearReleased");

	 colVideos[3] = new DataColumn(S"Length");

	 colVideos[4] = new DataColumn(S"Rating");

	 colVideos[5] = new DataColumn(S"Format");

	 colVideos[6] = new DataColumn(S"Category");



	 dtVideos->Columns->AddRange(colVideos);



	 dsVideoCollection->Tables->Add(dtVideos);

}

 

Practical Learning Practical Learning: Creating Columns

  1. Under the DataCenter form, click dsMusicStore if necessary. In the Properties window, click the Tables field to reveal its ellipsis button ellipsis and click the ellipsis button ellipsis
  2. In the Members list, click Categories if necessary. In the Categories Properties list, click the Columns field to reveal its ellipsis button ellipsis and click its ellipsis button ellipsis
  3. In the Columns Collection Editor, click the Add button
  4. While Column1 is still selected in the Members list, in the Column1 Properties list, click (Name) and type colCategory
  5. Click ColumnName and type Category
     
  6. Click Close
  7. In the same way, create the following columns for the corresponding tables
     
    Table Column (Name) ColumnName
    ItemTypes colItemType ItemType
    AvailableItems colItemCategory ItemCategory
    AvailableItems colTypeOfItem TypeOfItem
    AvailableItems colItemNumber ItemNumber
    AvailableItems colItemName ItemName
    AvailableItems colUnitPrice UnitPrice
  8. Click Close twice

Columns Data Types

If you create an object, such as a form, that allows the user to enter records for the above list of videos, you can reduce the likelihood of mistakes. For example, you can prevent the table from allowing the user to enter a director name in a box reserved for the year released. To exercise this type of control, the DataColumn class allows you to specify an appropriate or desired data type for each column. Just as done in C++ regular applications, the data types of a table allow its columns to accept or reject inappropriate values. Although we saw that the name was the most important aspect of a column, in reality, a data type is also required. Fortunately, if you don't specify the data type of a column, it is assumed to be a string and the String data type is automatically assigned to it.

To specify the data type of a column, you have two main alternatives. When declaring a column, to specify its data type, you can initialize the DataColumn variable using the third constructor. Its syntax is:

public: DataColumn(String* name, Type dataType);

To specify a column's data type, select one from the Type class of the System namespace by calling the Type::GetType() method. The GetType() method is overloaded with three versions. The first version has the following syntax:

public: static Type* GetType(String* typeName);

This method expects as argument a valid data type defined in the .NET Framework. The data type must be retrieved from the Type class of the System namespace. The name of the data type must be qualified with a period operator. Here is an example:

System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 colCategory   = new DataColumn(S"Category", System::Type::GetType(S"System.String"));

}

If you used the default constructor to declare a DataColumn, to specify its data type, assign its qualified type to the DataColumn::DataType property. Here is an example:

System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");



	 dtDirectors = new DataTable;

	 dtDirectors->TableName = S"Directors";

	 colDirector = new DataColumn();

	 colDirector->ColumnName = S"Director";

	 colDirector->DataType = System::Type::GetType(S"System.String");

	 colDirector = dtDirectors->Columns->Add("Director");

	 dsVideoCollection->Tables->Add(dtDirectors);

}

Remember that there are various techniques you can use to create a column by specifying its name and its data type. Here are various examples from what we have used so far:

#pragma once





namespace ExoTables1

{

	using namespace System;

	using namespace System::ComponentModel;

	using namespace System::Collections;

	using namespace System::Windows::Forms;

	using namespace System::Data;

	using namespace System::Drawing;



	. . . No Change



private:

	

	System::ComponentModel::Container * components;

	DataSet *dsVideoCollection;



	DataTable *dtVideoCategories;

	DataColumn *colCategory;



	DataTable *dtDirectors;

	DataColumn *colDirector;



	DataTable *dtActors;

	DataColumn *colActor;



	DataTable *dtVideos;

	static DataColumn *colVideos __gc[] = __gc new DataColumn*[7];



	. . . No Change



	

System::Void Form1_Load(System::Object *  sender, System::EventArgs *  e)

{

	 dsVideoCollection = new DataSet(S"Videos");



	 dtVideoCategories = new DataTable(S"Categories");

	 colCategory = new DataColumn(S"Category", System::Type::GetType(S"System.String"));

	 dsVideoCollection->Tables->Add(dtVideoCategories);



	 dtDirectors = new DataTable;

	 dtDirectors->TableName = S"Directors";

	 colDirector = new DataColumn();

	 colDirector->ColumnName = S"Director";

	 colDirector->DataType = System::Type::GetType(S"System.String");

	 colDirector = dtDirectors->Columns->Add("Director");

	 dsVideoCollection->Tables->Add(dtDirectors);



	 dtActors = dsVideoCollection->Tables->Add(S"Actors");

	 colActor = new DataColumn(S"Actor", System::Type::GetType(S"System.String"));

	 dtActors->Columns->Add(colActor);

	 

	 dtVideos = new DataTable(S"ListOfVideos");

		

	 colVideos[0] = new DataColumn;

	 colVideos[0]->ColumnName = S"Title";

	 colVideos[0]->DataType = System::Type::GetType(S"System.String");

	 colVideos[1] = new DataColumn(S"Director");

	 colVideos[1]->DataType = System::Type::GetType(S"System.String");

	 colVideos[2] = new DataColumn(S"YearReleased", System::Type::GetType(S"System.Int16"));

	 colVideos[3] = new DataColumn(S"Length", System::Type::GetType(S"System.String"));

	 colVideos[4] = new DataColumn(S"Rating", System::Type::GetType(S"System.String"));

	 colVideos[5] = new DataColumn(S"Format", System::Type::GetType(S"System.String"));

	 colVideos[6] = new DataColumn(S"Category", System::Type::GetType(S"System.String"));



	 dtVideos->Columns->AddRange(colVideos);

	 dsVideoCollection->Tables->Add(dtVideos);

}

};

}

Practical Learning Practical Learning: Creating Columns

  1. Under the Data Center form, click dsMusicStore if necessary. In the Properties window, click the Tables field to reveal its ellipsis button ellipsis and click the ellipsis button ellipsis
  2. In the Members list, click AvailableItems
  3. In the AvailableItems Properties list, click the Columns field to reveal its ellipsis button ellipsis and click its ellipsis button ellipsis
  4. In the Members list of the Columns Collection Editor, click UnitPrice
  5. In the UnitPrice Properties list, click DataType to display the arrow of its combo box and select System.Double
     
  6. In the Members list, click ItemCategory and, in the ItemCategory Properties list, make sure its DataType is set to System.String.
    In the same way, check that all the other columns data types are set to System.String
  7. Click Close twice
 

Previous Copyright 2005 FunctionX, Inc. Next