Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
Nevron Chart
Search :       Advanced Search »
Home » WPF » DataGrid in WPF

DataGrid in WPF

This article is a part 1 of my WPF DataGrid series. In this part, you will learn how to create a DataGrid using XAML and C# and set its properties. The article will also show you how to apply data binding on a collection.

Author Rank :
Page Views : 144909
Downloads : 3034
Rating :
 Rate it
Level : Beginner
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
DataGridSample.zip
 
 
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 


This article shows you how to create and use a DataGrid control in WPF and XAML.

Note: This article is written using Visual Studio 2010 and .NET Framework 4.0.

Introduction

DataGrid element represents WPF DataGrid control in XAML.  

 

<DataGrid />

 

When you drag and drop a DataGrid control from Toolbox to your designer, position the control, this action adds following code to XAML.

 

The Width and Height properties represent the width and the height of a DataGrid.  The Name property represents the name of the control, which is a unique identifier of a control.  The Margin property sets the margin of placement of DataGrid on the window. The following code snippet sets the name, height, width, and margin of a DataGrid control.

 

<DataGrid Height="148" HorizontalAlignment="Left" Margin="12,21,0,0" 

          Name="dataGrid1" VerticalAlignment="Top" Width="225" />

                                                       Listing 1

 

Figure 1 shows Toolbox and XAML code preview after a DataGrid is added to a page.

 

 

WpfDataGridImg1.gif

Figure 1

 

Data Binding

The ItemSource property of DataGrid is the key to data binding. You can bind any data source that implements IEnuemerable. Each row in the DataGrid is bound to an object in the data source and each column in the DataGrid is bound to a property of the data source objects.

In this example, we will create a collection of objects and bind it to a DataGrid control.

First, we are going to add a class to the project. The Author class looks like Listing 2 that has ID, Name, DOB, BookTitle, and IsMVP members.

public class Author

{

    public int ID { get; set; }

    public string Name { get; set; }       

    public DateTime DOB { get; set; }

    public string BookTitle { get; set; }

    public bool IsMVP  { get; set; }

}

Listing 2

 

Now let's create a collection of Author objects by using the List class. The LoadCollectionData method in Listing 3 creates a List of Author objects.

 

/// <summary>

/// List of Authors

/// </summary>

/// <returns></returns>

private List<Author> LoadCollectionData()

{

    List<Author> authors = new List<Author>();

    authors.Add(new Author(){

            ID = 101,

            Name = "Mahesh Chand",

            BookTitle = "Graphics Programming with GDI+",

            DOB = new DateTime(1975, 2, 23),

            IsMVP = false });

    authors.Add(new Author()

    {

        ID = 201,

        Name = "Mike Gold",

        BookTitle = "Programming C#",

        DOB = new DateTime(1982, 4, 12),

        IsMVP = true

    });

    authors.Add(new Author()

    {

        ID = 244,

        Name = "Mathew Cochran",

        BookTitle = "LINQ in Vista",

        DOB = new DateTime(1985, 9, 11),

        IsMVP = true

    });

    return authors;

}


Listing 3

 

Now the last step is to set ItemsSource property of DataGrid. The following code snippet sets the ItemsSource property of a DataGrid to List of Authors.

 

McDataGrid.ItemsSource = LoadCollectionData();

 

The data loaded in DataGrid looks like Figure 2, which shows the properties of the Author class a column names.

  

WpfDataGridImg2.gif

Figure 2

As you saw in Figure 2, all public properties of the Author object are represented as columns of the DataGrid. This is because by default, the AutoGenerateColumns property of DataGrid is true. If you do not wish to generate automatic columns, you simply need to set this property to false.

 

McDataGrid.AutoGenerateColumns = false;

 

Setting Column Width and Row Height

The ColumnWidth and RowHeight properties of DataGrid are used to set the default column width and row height of DataGrid columns and rows.

The following code snippet sets column width and row height to 100 and 30 respectively.

<DataGrid Height="200" Width="500" HorizontalAlignment="Left" Margin="12,21,0,0"

  Name="McDataGrid" VerticalAlignment="Top" RowHeight="30" ColumnWidth="100"

          >

The new DataGrid looks like Figure 3.

WpfDataGridImg3.gif

Figure 3

 The MaxWidth and MaxHeight properties represent the maximum width and maximum height of a DataGrid.  The MinWidth and MinHeight properties represent the minimum width and maximum height of a DataGrid. The MaxColumnWidth and MinColumnWidth properties represent the maximum width and minimum width of columns in a DataGrid.

Grid Lines Visibility and Header Visibility

The GridLinesVisibility property is used to make grid lines visible. Using this option you can show and hide vertical, horizontal, all, or none lines.  The HeaderVisibility property is used to show and hide row and column headers.

The following code snippet makes vertical grid lines visible and header visible for both rows and columns.

GridLinesVisibility="Vertical" HeadersVisibility="All"

The new DataGrid looks like Figure 4.

WpfDataGridImg4.gif

Figure 4

Grid Background, Row Background, and Alternative Row Background

The Background property is used to set the background color of the DataGrid. The RowBackground and AlternativeRowBackground properties are used to set the background color of rows and alternative of the DataGrid.

The following code snippet sets background, row background, and alternative row background colors of a DataGrid.

Background="LightGray" RowBackground="LightYellow"

AlternatingRowBackground="LightBlue"

The new DataGrid looks like Figure 5.

WpfDataGridImg5.gif

Figure 5

Border Color and Thickness

The BorderBrush and BorderThickness properties are used to set the color and width of the border. The following code snippet sets border color to gray and thickness to 5.

BorderBrush="Gray" BorderThickness="5"

The DataGrid with a new border looks like Figure 6.

WpfDataGridImg6.gif

Figure 6

Read Only and Freezing

The IsReadOnly property is used to make a DataGrid read only. That means you cannot edit a DataGrid. The following code snippet sets IsReadOnly property to true. 

IsReadOnly="True"

The AreRowDetailsFrozen property is used to freeze the row details area so it cannot be resized. The FrozenColumnCount property represents the number of columns that user can not scroll horizontally. The following code snippets sets AreRowDetailsFrozen to true and FrozenColumnCount to 2.

AreRowDetailsFrozen="True"

FrozenColumnCount="2"

 

DataGrid allows you to reorder columns by dragging a column but you may disable this feature by setting the CanUserReorderColumns property to false.  The following code snippet sets CanUserReorderColumns properties to false.

CanUserReorderColumns="False"

 

Data Grid allows you to change the width of columns. You may fix columns so user can't resize them by setting the CanUserResizeColumns property to false. The following code snippet sets CanUserResizeColumns properties to false.

CanUserResizeColumns="False"

Sorting

By default, column sorting is enabled on a DataGrid. You can sort a column by simply clicking on the column header.  You may disable this feature by setting CanUserSortColumns property to false. The following code snippet sets CanUserSortColumns properties to false.

CanUserSortColumns = "False"

Scrolling

The HorizontalScrollBarVisibility and VerticalScrollBarVisibility properties of type ScrollBarVisibility enumeration control the horizontal and vertical scrollbars of the DataGrid. It has four values - Auto, Disabled, Hidden, and Visible. The default value of these properties is Auto, that means, when scrolling is needed, you will see it, otherwise it will be hidden.

The following code snippet enables the horizontal and vertical scrollbars. 

HorizontalScrollBarVisibility="Visible"

VerticalScrollBarVisibility="Visible"

 

The DataGrid with both scrollbars looks like Figure 7.

WpfDataGridImg7.gif

Figure 7

Selection Mode

The SelectionMode property decides if the DataGrid allows only a single row or multiple rows selection. It has two values – Single and Extended.  The following code snippet sets the SelectionMode to Extended.

SelectionMode="Extended"


Summary

In this article, I demonstrated how to create a DataGrid control using XAML and how to set its properties and display data using a collection of objects. I also discussed how to format the DataGrid rows, columns, their visibility, and scrolling. We also saw, how to make rows read-only and set selection mode property.


I am working on several more part of this series and will publish as soon as I am done. My goal is write a complete book chapter on Just DataGrid control. If you have some cool code, any tips or article on WPF DataGrid, feel free to share here. 


 


Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 [Top] Rate this article
 
 About the author
 
Mahesh Chand
Mahesh is the founder of C# Corner and Mindcracker Network, an author of several .NET programming books and a Microsoft MVP for 6 consecutive years. In his day to day work, Mahesh is a Senior Software Consultant with over 14 years of IT industry experience building systems for Financial and Banking, Engineering & Architectural, Imaging, Construction, Biological & Pharmaceuticals, Healthcare and Education industries. His expertise is Windows Forms, ASP.NET, Silverlight, WPF, WCF, Visual Studio 2010, SQL Server, and Oracle.  If you are looking for a Sharepoint, Windows Forms, ASP.NET, WPF, Silverlight, C#, VB.NET, Oracle, and SQL Server Consultant in Philadelphia area or remote location, drop me a line at MAHESH [AT] C-SHARPCORNER [DOT] COM.
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the Top 5 .NET Memory Management Fundamentals
To write the best .NET code, you need to know exactly how the .NET framework really manages memory. Ricky Leeks presents the Top 5 fundamental facts of .NET memory management. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
Nevron Chart
Become a Sponsor
 Comments
user changes in datagrid by moria On January 26, 2010
hello!
first of all, thank you very much for your work. it has been very usful to me many times.

in my application (c#: WPF) i have binded a datagrid to an arrylist. one of the properties in my class is a sum of two of the other properties (all ints). i am trying to get the sum column to change if the user changes one of the values that the sum is made of, but with no luck.
can you help me pleas?

thank you, moria
Reply | Email | Modify 
nice work by Mehri On March 16, 2010
good one !
Reply | Email | Modify 
Thanks for a simple tutorial :) by Patrick On June 4, 2010
uh, thanks, finally a simple tutorial how to use Datagrid :)
Reply | Email | Modify 
Thanks by Surya On September 17, 2010
Great article man.This one helped me a lot .Thank you so much
Reply | Email | Modify 
Nice. by olaamigoquepasa On October 4, 2010
Very readable and clear. Found it very useful. Thanks for posting.

Ed
Reply | Email | Modify 
Re: Nice. by Mahesh On November 7, 2010
Thanks Ed.
Reply | Email | Modify 
Find Visibility of Vertical Scroll bar in code behind by lakchana On October 6, 2010
Thanks for the article. I've a datagrid with both scrollbars visibility set to Auto. I need to adjust one of my columns width based on the visibility of vertical scroll bar, so that my horizontal scroll bar will not be visible.
Reply | Email | Modify 
DataGrid by Pritesh On December 8, 2010
Hi masters,
I can't see datagrid control in my tool box what should i do?
I am using VS2008 and i am creating small application in WPF?
Reply | Email | Modify 
Additional empty right hand column by Stickleback On January 28, 2011
Hi. First off thanks for a very useful article. I do have a question though regarding an additional empty column that I have appearing on the right hand side of the datagrid. A similar situation seems to be happening in figure 2 in your tutorial. I was wondering why it is happening & if there is anything that can be done to stop it. Thanks in advance. Stick.
Reply | Email | Modify 
Re: Additional empty right hand column by Stickleback On January 28, 2011
Just in case anyone else has the same question - set the main column on the grid to have a Width of "*" so that it takes up any unused space e..g. :- <DataGridTextColumn Header="Job Name" Binding="{Binding JobName}" Width="*"></DataGridTextColumn>
Reply | Email | Modify 
Datagrid runtype discovery of properties by stephandeckers On February 12, 2011
When I bind a list as in List<Person> of classes to a Datagrid, the Datagrid is able to discover all properties and to bind themto columns. When I create a collection class which holds the same Person class, and derive it from IEnumerable and IEnumerator,the DataGrid calls IEnumerator.MoveNext and IEnumerator.Current and it shows the correct # of rows, but now properties are discovered ? What is it in a List that makes a Datagrid discover the properties of a object used for databinding ? thanks, Steef
Reply | Email | Modify 
Re: Datagrid runtype discovery of properties by Syed On February 17, 2011
Nice Explanation
Reply | Email | Modify 
How to get the row pointer by rama On April 22, 2011
Hi, In the last image for the selected row you are showing an pointer in the left most column , how to get that pointer , i checked in ur sample application but its not implemented , can you please share it ??
Reply | Email | Modify 
column headers by F On April 29, 2011
How are you getting the gridlines to show in the column headers? I get gridlines elsewhere but not in the header. Also how is the background color of the header determined?
Reply | Email | Modify 
WPF books by F On April 29, 2011
I have 2 books on WPF but neither one shows how to use controls such as the datagrid. Anyone know of any useful books?
Reply | Email | Modify 
Re: WPF books by Mahesh On May 10, 2011
I would look for a book on "Data Binding in WPF".
Reply | Email | Modify 
Re: Re: WPF books by Mat On May 30, 2011
very readable! thank you for your help!
Reply | Email | Modify 
Datagrid binding in wpf by weizz On July 25, 2011
Hi, I'm a newbie to wpf, hope to get some advise. I'm now need to retrieve the survey questions from the database(Microsoft Sql Server 2008) through web service of remote computer and display it at the wpf app over another machine. My question is how can i retrieve the questions at the wpf app? Do I need to download the WPF Toolkit and what is the use of it? How to bind the datagrid source to the data retrieve from the web service? Please guide me. Thanks in advance.
Reply | Email | Modify 
Re: Datagrid binding in wpf by Mahesh On September 8, 2011
Your WebService should be returning data in a string or XmlNode. You need to convert that to a collection such as an Array or load XmlNode to a DataTable or DataSet. Then you can direct bind it to the DataGrid.
Reply | Email | Modify 
Two Datagrids binded to a DB by Tegan On October 2, 2011
Hi.. Thanks for the article. I have two Datagrids both bound to similar tables in a sql 08 db. What i am struggling to do is to select a row in lets say dgA and select a row in dgB. Then the Row in dgA updates the row in dgB Thanks
Reply | Email | Modify 
Reading Data Grid Values after Binding from DataSet linked to Stored Procedure by Edwin On October 3, 2011
Hi, Very use full article. For beginners in WPF like me can utilize it very well. Thanks a lot. I have some doubt on Datragrid's Readability after binding data from a standers source. I am binding datagrid to its Itemsource property from a Dataset which is linked to a Stored procedure Now based on a specific column's value i want to change the baground color of a row in this grid. after searching i could find ".Rows" property at all in the grid. And getting the specific Rows and column's value is impossible. we normally use "datagrid1.Rows[0].Cell[0].values" in c# code, Is there any substitute for this line in WPF DataGrid? can you please help me on this? Since we all need to bind data from Database through any specific source, and manipulate the data from DataGrid, if you could flash some lights on the topic for the correct path will be grate full. I hope you can. Thank you in advance Edwin
Reply | Email | Modify 
Data grid by Jamie On January 26, 2012
I'm curious as to where the "McDataGrid.ItemsSource = LoadCollectionData();" goes.
Reply | Email | Modify 
6 Months Free & No Setup Fees ASP.NET Hosting!
 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.