SUMMARY
This step-by-step article describes how to bind an array of
objects to a
DataGrid control. The example includes a Windows form with a
DataGrid control to display object property values, and includes four command
buttons to browse the rows of the
DataGrid control.
back to the
topRequirements
The following list outlines the recommended hardware,
software, network infrastructure, and service packs that are required:
- Microsoft Visual C++ .NET or Microsoft Visual C++ 2005
This article assumes that you are familiar with the following
topics:
- Visual C++ programming concepts
back to the
topDesign the class
A class that you bind to a control must have property
accessors. Any property that you bind must have the
Property Set and the
Property Get methods. The sample class that is used in this article has three
members. A parameterized constructor is also provided. However, a parameterized constructor is not required.
__gc class Guitar
{
private:
String *make;
String *model;
short year;
public:
Guitar(void);
~Guitar(void);
Guitar(String *strMake, String *strModel, short shYear)
{
make = strMake;
model = strModel;
year = shYear;
}
__property String* get_Make()
{
return make;
}
__property void set_Make(String* val)
{
make = (val);
}
__property String* get_Model()
{
return model;
}
__property void set_Model(String* val)
{
model = (val);
}
__property short get_Year()
{
return year;
}
__property void set_Year(short shValue)
{
year = shValue;
}
};
Note You must add the common language runtime (CLR) support compiler option (/clr:oldSyntax) in Visual C++ 2005 to successfully compile the previous code sample.
To do this, follow these steps:
- Click Project, and then click ProjectName Properties.
Note ProjectName represents the name of the project. - Expand Configuration Properties, and then click General.
- Click to select the Common Language Runtime Support, Old Syntax (/clr:oldSyntax) check box under the Common Language Runtime support in the right pane, click Apply, and then click OK.
For more information about the CLR support compiler options, visit the following Microsoft Web site:
back to the topAdd class instances to an array
To create instances, and then add them to the array, follow these steps:
- Declare an array.
- Create instances of the class, and then add the instances
to the array as follows:
private: Guitar *arr[];
arr = new Guitar *[3];
arr[0] = new Guitar(S"Gibson", S"Les Paul", 1958);
arr[1] = new Guitar(S"Fender", S"Jazz Bass", 1964);
arr[2] = new Guitar(S"Guild", S"Bluesbird", 1971);
back to the topBind the array to the DataGrid control
After the array is populated, set the
DataSource property of the
DataGrid control to the array. The columns in the
DataGrid control are populated based on the properties for which in-scope
property accessors exist.
dataGrid1->DataSource = arr;
back to the topProvide a means to browse the array
You can use the
CurrencyManager class to browse through the array. To do this, associate the
CurrencyManager class with the
BindingContext property of the control (in this case, the array).
private: CurrencyManager *currencyManager;
currencyManager = NULL;
currencyManager = static_cast<CurrencyManager*>(dataGrid1->BindingContext->get_Item(arr));
The
CurrencyManager class has a
Position property that you can change to iterate over the members of
the array. By adding to or subtracting from the current value of the
Position property, you can browse the rows of the
DataGrid control.
//Move forward one element.
currencyManager->Position++;
//Move back one element.
currencyManager->Position--;
//Move to the beginning.
currencyManager->Position = 0;
//Move to the end.
currencyManager->Position = arr->Length - 1;
back to the topStep-by-step example
- Start Microsoft Visual Studio .NET 2003 or Microsoft Visual Studio 2005.
- On the File menu, point to
New, and then click Project.
- Click
Visual C++ .NET Projects under Project Types, and then click
Windows Forms Application (.NET) under Templates.
Note In Visual Studio 2005, click Visual C++ under Project Types, and then click Windows Forms Application under Templates. - In the Name text box, type
Q816146. In the Locate text box, type
C:\, and then click
OK.
- In Solution Explorer, switch to Class View. To do this,
click Class View on the View menu.
- Right-click Q816146, point to
Add, and then click Add Class.
- In the Add Class dialog box, click Generic C++ Class under Templates,
and then click Open.
Note In Visual Studio 2005, click Add. - In the Generic C++ Class Wizard, type
Guitar in the Class name text box, and
then click Finish. The Guitar class appears as follows:
#pragma once
class Guitar
{
public:
Guitar(void);
~Guitar(void);
};
To make the Guitar class a Managed Extensions for C++ class, add the __gc keyword in front of the Guitar class:__gc class Guitar
{
public:
Guitar(void);
~Guitar(void);
};
- Replace the code in Guitar.h with the following:
#pragma once
using namespace System;
__gc class Guitar
{
private:
String *make;
String *model;
short year;
public:
Guitar(void);
~Guitar(void);
Guitar(String *strMake, String *strModel, short shYear)
{
make = strMake;
model = strModel;
year = shYear;
}
__property String* get_Make()
{
return make;
}
__property void set_Make(String* val)
{
make = (val);
}
__property String* get_Model()
{
return model;
}
__property void set_Model(String* val)
{
model = (val);
}
__property short get_Year()
{
return year;
}
__property void set_Year(short shValue)
{
year = shValue;
}
};
- Close the Guitar.h code window, and then switch to the Form
Designer.
- Add a DataGrid control to Form1. Size the
DataGrid control to contain four columns and three
rows.
- Add four Button controls to Form1, and
then arrange the buttons horizontally.
- Change the Text property of Button1 to
Next.
- Change the Text property of Button2 to
Previous.
- Change the Text property of Button3 to
First.
- Change the Text property of Button4 to
Last.
- Open the Form1.h file, and add the following code:
#include "Guitar.h"
- Add the following code to the Form1
class:
private: Guitar *arr[];
CurrencyManager *currencyManager;
- Switch to the Form Designer, right-click the form, and then
click Properties.
- Click the Events icon, and then
double-click the Load event to add the
Form1_Load event to your code.
- Add the following code to the Form1_Load event:
currencyManager = NULL;
arr = new Guitar *[3];
arr[0] = new Guitar(S"Gibson", S"Les Paul", 1958);
arr[1] = new Guitar(S"Fender", S"Jazz Bass", 1964);
arr[2] = new Guitar(S"Guild", S"Bluesbird", 1971);
currencyManager = static_cast<CurrencyManager*>(dataGrid1->BindingContext->get_Item(arr));
dataGrid1->DataSource = arr;
- Switch to the Form Designer.
- Double-click Next, and then add the
following code to the button1_Click event:
currencyManager->Position++;
- Double-click Previous, and then add the
following code to the button2_Click event:
currencyManager->Position--;
- Double-click First, and then add the
following code to the button3_Click event:
currencyManager->Position = 0;
- Double-click Last, and then add the
following code to the button4_Click event:
currencyManager->Position = arr->Length - 1;
- Build and run the project.
- Click the command buttons to move among the rows of the
DataGrid control. You can edit the values of the
objects.
back to the
topUse a Structure Instead of a Class
The rules for binding a structure are the same as the rules
for binding an object. You must have property (or member) accessors to do this. A
structure that is created for this purpose looks similar to a class.
To bind to an
array of structures, follow these steps:
- Change the definition of the Class1.cs class module in the
example from the following:
__gc class Guitar
to the following:__gc struct Guitar
- Build and run the example program again. Verify that it
functions with an array of structures.
back to the
top