Add Windows GridView control in WPF dynamically in C#.

The purpose this article is to add Windows Data Grid View control to the WPF application with Windows Host object. From that build Data Grid View with inline code then place to Windows host object within C# code.

This article will explore  how to invoke Windows Data Grid View control into the Windows Presentation Foundation,because  there is no  standard control like Windows Data Grid View in WPF.To this we need to follow a few steps to achieve our goal.

Step 1:
     You need create a Window Presentation Foundation(WPF) Application  using visual studio. give name as WindowsDGVInWPF. look followings figure to get clear.




Look fine now we  look at the Window which has created by visual studio.The next step here we need add Window control within the WPF application, for this Microsoft released a library called as "WindowsFormHost".

Lets add the control within the your WPF application.this library existing within the .NET Framework 3.0 folder,just right click on the Project then select Add Refference menu.then move to  browse tab in the window.then navigate to the .NET Framework 3.0 folder and select the WindowsFormsIntegration.dll.look following figure to more.



finally you need add System.Windows.Form library also.Now everything fine to reference adding.

Lets write few XAML code in the Design window  to add Windows Form Host object.

You  need write following code to add Windows Form Host object into the window.

XAML File code

<Window x:Class="WindowsDGVInWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<WindowsFormsHost Height="400" Margin="0,10,0,10" Name="windowsFormsHostDetail" Grid.ColumnSpan="2" Grid.Row="1"    VerticalAlignment="Top" >

</WindowsFormsHost>
</Grid>
</Window>



Now start to build your Data Grid View by code.to this just navigate to code file to the window1.xaml .

Just add this lines of code.

Code File


System.Windows.Forms.DataGridView dataGridViewDetail = null;


internal void WindowsFormGridInit()
{
System.Windows.Forms.DataGridViewTextBoxColumn Column2;
System.Windows.Forms.DataGridViewCheckBoxColumn Column3;
System.Windows.Forms.DataGridViewCheckBoxColumn Column4;
System.Windows.Forms.DataGridViewTextBoxColumn Column5;
System.Windows.Forms.DataGridViewCheckBoxColumn Column6;
System.Windows.Forms.DataGridViewTextBoxColumn columnDestValueField;
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();

dataGridViewDetail = new System.Windows.Forms.DataGridView();
dataGridViewDetail.AllowUserToAddRows = false;          
Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
columnDestValueField = new DataGridViewTextBoxColumn();
Column3 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
Column4 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
Column5 = new System.Windows.Forms.DataGridViewTextBoxColumn();
Column6 = new System.Windows.Forms.DataGridViewCheckBoxColumn();
Column7 = new System.Windows.Forms.DataGridViewComboBoxColumn();

((System.ComponentModel.ISupportInitialize)(dataGridViewDetail)).BeginInit();

//
// dataGridView1
//
dataGridViewCellStyle1.BackColor = System.Drawing.Color.LemonChiffon;
dataGridViewCellStyle1.ForeColor = System.Drawing.Color.Black;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.Beige;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
dataGridViewDetail.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1;
dataGridViewDetail.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewDetail.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
Column2,
columnDestValueField,
Column3,
Column4,
Column5,
Column6,
Column7

});
dataGridViewDetail.Location = new System.Drawing.Point(40, 46);
dataGridViewDetail.Name = "dataGridView1";
dataGridViewDetail.RowHeadersVisible = false;
dataGridViewDetail.Size = new System.Drawing.Size(655, 150);
dataGridViewDetail.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
dataGridViewDetail.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;
dataGridViewDetail.BackgroundColor = System.Drawing.Color.Gainsboro;
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Black;
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Blue;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.White;


dataGridViewDetail.TabIndex = 0;
//
// Column2
//
Column2.HeaderText = "Destination Display Name";
Column2.Name = "Column2";
Column2.DataPropertyName = "DestinationDisplayField";
Column2.ReadOnly = true;
Column2.Width = 200;
Column2.DefaultCellStyle = dataGridViewCellStyle2;
Column2.DisplayIndex = 0;

// Destionation Value Field

columnDestValueField.HeaderText = "Destination Element Name";
columnDestValueField.Width = 150;
columnDestValueField.DefaultCellStyle = dataGridViewCellStyle2;
columnDestValueField.DataPropertyName = "DestionationValueField";
columnDestValueField.ReadOnly = true;
columnDestValueField.Width = 200;
columnDestValueField.Name = "DestValueField";
columnDestValueField.DisplayIndex = 1;
//
// Column3
//
Column3.HeaderText = "Ignore";
Column3.DataPropertyName = "IsIgnore";
Column3.Name = "Column3";
Column3.DisplayIndex = 2;
Column3.Visible = false;
//Column3.DefaultCellStyle = dataGridViewCellStyle2;
//
// Column4
//
Column4.HeaderText = "Custom";
Column4.DataPropertyName = "IsCustom";
Column4.Name = "Column4";
Column4.DisplayIndex = 3;
Column4.Visible = false;
//Column4.DefaultCellStyle = dataGridViewCellStyle2;
//
// Column5
//
Column5.HeaderText = "Values";
Column5.DataPropertyName = "CustomValue";
Column5.Name = "Column5";
Column5.DefaultCellStyle = dataGridViewCellStyle2;
columnDestValueField.DisplayIndex = 4;
Column5.Visible = false;
//
// Column6
//
Column6.HeaderText = "Selection";
Column6.DataPropertyName = "IsFixed";
Column6.Name = "Column6";
Column6.DisplayIndex = 5;
Column6.Visible = false;
//Column6.DefaultCellStyle = dataGridViewCellStyle2;
//
// Column7
//

Column7.HeaderText = "CSV Source Fields";
Column7.DisplayMember = "DisplayValue";
Column7.ValueMember = "ValueMember";
Column7.DefaultCellStyle = dataGridViewCellStyle2;
Column7.DisplayIndex = 6;
Column7.Width = 200;
Column7.Name = "Column7";
((System.ComponentModel.ISupportInitialize)(dataGridViewDetail)).EndInit();
windowsFormsHostDetail.Child = dataGridViewDetail;

}

This is internal method to build grid and add as child control to the WindowsFormHost object.here just highlighted that important line.

Then we need call this method within the your window constructor. that;s like be followings lines of code.

Code File
public Window1()
{
InitializeComponent();
WindowsFormGridInit();
}


Finally you need to bind data collection to the Grid View Control and also DropDownlist.

private void BindDataToGrid()
{
if (colectionDetailsContanier != null)
{
if (colectionDetailsContanier.Count > 0)
{

Column7.DataSource = colectionDetailsContanier[0].CollectionDataDefSrcFieldList;
Column7.MaxDropDownItems = 10;
Column7.AutoComplete = true;
Column7.Selected = true;
dataGridViewDetail.DataSource = colectionDetailsContanier;
}
}
}

Just call this function within the Window Load event like

Code File


void Window1_Loaded(object sender, RoutedEventArgs e)
{
BindDataToGrid();
}


Here colectionDetailsContanier is data source which has build up from the database records.everything look fine build the application and run you will get result like.


Note:Here  i set some of the data column visible false.

I hope this article help to who are trying to building DataGridView with WPF.if you have any questions or find any mistake please made as comments.

Thank you

RRaveen


By Ravenet Rasaiyah   Popularity  (9385 Views)
Biography - Ravenet Rasaiyah
My name is RRaveen, and my profession is software developing since 2006 (having more than 4 years experience) and holding MCTS,MCPD certifications and most of developments are based on MS technologies .Specifically ASP.NET ,Sharepoint and Widows Mobiles. I have worked on ERP systems also.