Thursday, June 26, 2008

Multicolumn treeview in C++/CLI using WPF

This is a sample code. You can modify it and try to create the controls as dynamically. It display a tree like this.
=====================
- Nod1.1 Node1.2
Node1..1 Node 1.2.2
- Node2.1 Node 2.2
Node2.1.1 Node 2.2.2
=====================



using namespace System;
using namespace System::Windows;
using namespace System::Windows::Controls;


ref class FirstWindow : Window
{
Canvas^ maincanvas;

TextBox^ textbox_a1;
TextBox^ textbox_a2;

TextBox^ textbox_b1;
TextBox^ textbox_b2;


TextBox^ textbox_c1;
TextBox^ textbox_c2;

TextBox^ textbox_d1;
TextBox^ textbox_d2;


TreeView ^g_TreeView;

TreeViewItem^ g_TreeViewItem;
TreeViewItem^ g_TreeViewItem1;
TreeViewItem^ g_TreeViewItem2;

Grid^ g_Grid_a1;
ColumnDefinition^ g_ColumnDefinition_a1; ColumnDefinition^ g_ColumnDefinition_a2;
RowDefinition^ g_RowDefinitions_a1; RowDefinition^ g_RowDefinitions_a2;

Grid^ g_Grid_b1;
ColumnDefinition^ g_ColumnDefinition_b1; ColumnDefinition^ g_ColumnDefinition_b2;
RowDefinition^ g_RowDefinitions_b1; RowDefinition^ g_RowDefinitions_b2;


Grid^ g_Grid_c1;
ColumnDefinition^ g_ColumnDefinition_c1; ColumnDefinition^ g_ColumnDefinition_c2;
RowDefinition^ g_RowDefinitions_c1; RowDefinition^ g_RowDefinitions_c2;

Grid^ g_Grid_d1;
ColumnDefinition^ g_ColumnDefinition_d1; ColumnDefinition^ g_ColumnDefinition_d2;
RowDefinition^ g_RowDefinitions_d1; RowDefinition^ g_RowDefinitions_d2;


public:
FirstWindow(void)
{
Title = "Multi column TreeView ";
Width = 400;
Height = 400;
ResizeMode = System::Windows::ResizeMode::NoResize;

InitControls();
}
void InitControls(void)
{

textbox_a1 = gcnew TextBox();
textbox_a1->Width = 50;
textbox_a1->Height = 20;
textbox_a1->Text ="Node 1";

textbox_a2 = gcnew TextBox();
textbox_a2->Width = 50;
textbox_a2->Height = 20;
textbox_a2->Text ="god";


textbox_b1 = gcnew TextBox();
textbox_b1->Width = 50;
textbox_b1->Height = 20;
textbox_b1->Text ="Node 1";

textbox_b2 = gcnew TextBox();
textbox_b2->Width = 50;
textbox_b2->Height = 20;
textbox_b2->Text ="god";


textbox_c1 = gcnew TextBox();
textbox_c1->Width = 50;
textbox_c1->Height = 20;
textbox_c1->Text ="Node 1";

textbox_c2 = gcnew TextBox();
textbox_c2->Width = 50;
textbox_c2->Height = 20;
textbox_c2->Text ="god";

textbox_d1 = gcnew TextBox();
textbox_d1->Width = 50;
textbox_d1->Height = 20;
textbox_d1->Text ="Node 1";

textbox_d2 = gcnew TextBox();
textbox_d2->Width = 50;
textbox_d2->Height = 20;
textbox_d2->Text ="god";



g_ColumnDefinition_a1 = gcnew ColumnDefinition();
g_RowDefinitions_a1 = gcnew RowDefinition();

g_ColumnDefinition_a2 = gcnew ColumnDefinition();
g_RowDefinitions_a2 = gcnew RowDefinition();

g_ColumnDefinition_b1 = gcnew ColumnDefinition();
g_RowDefinitions_b1 = gcnew RowDefinition();

g_ColumnDefinition_b2 = gcnew ColumnDefinition();
g_RowDefinitions_b2 = gcnew RowDefinition();

g_ColumnDefinition_c1 = gcnew ColumnDefinition();
g_ColumnDefinition_c2 = gcnew ColumnDefinition();

g_RowDefinitions_c1 = gcnew RowDefinition();
g_RowDefinitions_c2 = gcnew RowDefinition();


g_ColumnDefinition_d1 = gcnew ColumnDefinition();
g_ColumnDefinition_d2 = gcnew ColumnDefinition();
g_RowDefinitions_d1 = gcnew RowDefinition();
g_RowDefinitions_d2 = gcnew RowDefinition();



g_Grid_a1 = gcnew Grid();
g_Grid_a1->RowDefinitions->Add(g_RowDefinitions_a1);
g_Grid_a1->ColumnDefinitions->Add(g_ColumnDefinition_a1);
g_Grid_a1->ColumnDefinitions->Add(g_ColumnDefinition_a2);
g_Grid_a1->ShowGridLines=true;
g_Grid_a1->Height=20;
g_Grid_a1->Width =100;
g_Grid_a1->SetColumn(textbox_a1,0);
g_Grid_a1->SetColumn(textbox_a2,2);
g_Grid_a1->Children->Add(textbox_a1);
g_Grid_a1->Children->Add(textbox_a2);



g_Grid_b1 = gcnew Grid();
g_Grid_b1->RowDefinitions->Add(g_RowDefinitions_b1);
g_Grid_b1->ColumnDefinitions->Add(g_ColumnDefinition_b1);
// g_Grid_a1->RowDefinitions->Add(g_RowDefinitions_a2);
g_Grid_b1->ColumnDefinitions->Add(g_ColumnDefinition_b2);
g_Grid_b1->ShowGridLines=true;
g_Grid_b1->Height=20;
g_Grid_b1->Width =100;
g_Grid_b1->SetColumn(textbox_b1,0);
g_Grid_b1->SetColumn(textbox_b2,2);
g_Grid_b1->Children->Add(textbox_b1);
g_Grid_b1->Children->Add(textbox_b2);





g_Grid_c1 = gcnew Grid();
g_Grid_c1->RowDefinitions->Add(g_RowDefinitions_c1);
g_Grid_c1->ColumnDefinitions->Add(g_ColumnDefinition_c1);
// g_Grid_a1->RowDefinitions->Add(g_RowDefinitions_a2);
g_Grid_c1->ColumnDefinitions->Add(g_ColumnDefinition_c2);
g_Grid_c1->ShowGridLines=true;
g_Grid_c1->Height=20;
g_Grid_c1->Width =100;
g_Grid_c1->SetColumn(textbox_c1,0);
g_Grid_c1->SetColumn(textbox_c2,2);
g_Grid_c1->Children->Add(textbox_c1);
g_Grid_c1->Children->Add(textbox_c2);


g_Grid_d1 = gcnew Grid();
g_Grid_d1->RowDefinitions->Add(g_RowDefinitions_d1);
g_Grid_d1->ColumnDefinitions->Add(g_ColumnDefinition_d1);
// g_Grid_a1->RowDefinitions->Add(g_RowDefinitions_a2);
g_Grid_d1->ColumnDefinitions->Add(g_ColumnDefinition_d2);
g_Grid_d1->ShowGridLines=true;
g_Grid_d1->Height=20;
g_Grid_d1->Width =100;
g_Grid_d1->SetColumn(textbox_d1,0);
g_Grid_d1->SetColumn(textbox_d2,2);
g_Grid_d1->Children->Add(textbox_d1);
g_Grid_d1->Children->Add(textbox_d2);

g_TreeView = gcnew TreeView();
g_TreeView->Width= 300;
g_TreeView->Height = 200;

g_TreeViewItem1 = gcnew TreeViewItem();
g_TreeViewItem1->Header = g_Grid_b1;
//g_TreeViewItem1->Items->Add("Sub Sub Node God");
g_TreeViewItem1->Items->Add(g_Grid_c1);


g_TreeViewItem = gcnew TreeViewItem();
//g_TreeViewItem->Header = "root";
g_TreeViewItem->Header = g_Grid_d1;
g_TreeViewItem->Items->Add(g_Grid_a1);
g_TreeViewItem->Items->Add(g_TreeViewItem1);
g_TreeView->Items->Add(g_TreeViewItem);
Canvas::SetTop(g_TreeView,10);
Canvas::SetLeft(g_TreeView,10);


maincanvas = gcnew Canvas();
maincanvas->Children->Add(g_TreeView);
Content = maincanvas;
}
};