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
Team Foundation Server Hosting
Search :       Advanced Search »
Home » WPF » GridView in WPF

GridView in WPF

If you are looking for a GridView control in WPF, you will be disappointed. WPF does not have a GridView control. But the good news is you can achieve a GridView like functionality with a ListView control available in WPF. This article demonstrates how to generate a GridView like ListView control in WPF.

Author Rank :
Page Views : 69314
Downloads : 1504
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:
ListViewSample.zip
 
 
Team Foundation Server Hosting
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 


If you are looking for a GridView control in WPF, you will be disappointed. WPF does not have a GridView control. But the good news is you can achieve GridView like functionality with a ListView control available in WPF.

If you have not used a ListView control in WPF, I recommend you read my ListView in WPF article before this article.

The View property is used to provide a GridView layout and design in a ListView control. The View property of ListView is a type of ViewBase class that supports two view types - GridView and a custom view.  A GridView is used for arranging data in columns and adding layout and design support to a ListView.

The following code snippet sets the View property of a ListView to GridView mode.

<ListView>

    <ListView.View>

        <GridView />

     </ListView.View>

</ListView>

A GridView is used as a supplement control to a ListView to provide style and layout. The GridView does not have its own control related properties such as background and foreground colors, font properties, size, and location. The container ListView is used to provide all control related properties.

Creating a GridView

The GridView element in XAML represents a GridView at design-time. The Columns property of GridView returns a collection of GridViewColumn objects. GridViewColumn element in XAML represents a GridView column. AllowsColumnReorder property represents weather columns in a GridView can be reordered by a user by dragging and dropping from one position to another. ColumnHeaderToolTip property represents the content of a tooltip that appears when the mouse pointer pauses over one of the column headers.

The code listed in Listing 1 creates a GridView control and adds four columns to it. The Header property of GridViewColumn represents the header of a column. The Width property represents the width of a column and the DisplayMemberBinding property is used to bind a GridViewColumn to a property of data binding object.

<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors"

          >

<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />

    <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Path=Age}" />

    <GridViewColumn Header="Book" Width="250" DisplayMemberBinding="{Binding Path=Book}" />

    <GridViewColumn Header="MVP" Width="50" DisplayMemberBinding="{Binding Path=Mvp}" />

   

</GridView>

Listing 1

The output of listing looks like Figure 1.

GridViewImg1.gif

Figure 1

The GridCiew class in WPF represents a GridView control. The GridViewColumn class represents a GridView column. The code listed in Listing 2 creates a GridView control and adds four columns to it dynamically.

private void CreateDynamicGridView()

{

    // Create a GridView 

    GridView grdView = new GridView();

    grdView.AllowsColumnReorder = true;

    grdView.ColumnHeaderToolTip = "Authors";

 

    GridViewColumn nameColumn = new GridViewColumn();

    nameColumn.DisplayMemberBinding = new Binding("Name");

    nameColumn.Header = "Author Name";

    nameColumn.Width = 120;

    grdView.Columns.Add(nameColumn);

 

    GridViewColumn ageColumn = new GridViewColumn();

    ageColumn.DisplayMemberBinding = new Binding("Age");

    ageColumn.Header = "Age";

    ageColumn.Width = 30;

    grdView.Columns.Add(ageColumn);

 

    GridViewColumn bookColumn = new GridViewColumn();

    bookColumn.DisplayMemberBinding = new Binding("Book");

    bookColumn.Header = "Book";

    bookColumn.Width = 250;

    grdView.Columns.Add(bookColumn);

 

    GridViewColumn mvpColumn = new GridViewColumn();

    mvpColumn.DisplayMemberBinding = new Binding("Mvp");

    mvpColumn.Header = "Mvp";

    mvpColumn.Width = 50;

    grdView.Columns.Add(mvpColumn);

 

    ListView1.View = grdView;

}

Listing 2

Adding a ContextMenu to a GridView Header

The ColumnHeaderContextMenu property of GridView is used to gets or sets a ContextMenu when you click on the header of a GridView control. The code snippet listed in Listing 3 adds a ContextMenu to a GridView header.

<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors">

   

    <!-- Add a ContextMenu to GridView Header -->

    <GridView.ColumnHeaderContextMenu>

        <ContextMenu >

            <MenuItem Header="Ascending" Click="MenuItem_Click" />

            <MenuItem Header="Descending" />

        </ContextMenu>

    </GridView.ColumnHeaderContextMenu>                 

    <!-- Add GridVeiw Columns -->                   

    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Path=Name}" />

    <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Path=Age}" />

    <GridViewColumn Header="Book" Width="250" DisplayMemberBinding="{Binding Path=Book}" />

    <GridViewColumn Header="MVP" Width="50" DisplayMemberBinding="{Binding Path=Mvp}" />

   

</GridView>

Listing 3

The output of listing looks like Figure2.

GridViewImg2.gif

Figure 2

Adding a CheckBox to a GridView Header

The ColumnHeaderTemplate property represents the template for the column header. Using this property, you may format GridView column headers the way you want. You may add CheckBoxes or Images to the column headers.

The code snippet in Listing 4 creates a DataTemplate resource with a CheckBox and orange foreground color of text that we can set as ColumnHeaderTemplate of a GridView.

<Window.Resources>       

    <DataTemplate x:Key="OrangeHeaderTemplate">

        <DockPanel>

            <CheckBox/>

            <TextBlock FontSize="10" Foreground="Orange"

                       FontWeight="Bold" >

      <TextBlock.Text>

        <Binding/>

      </TextBlock.Text>

            </TextBlock>

        </DockPanel>

    </DataTemplate>       

   

</Window.Resources>

Listing 4

The code snippet in Listing 5 sets the ColumnHeaderTemplate of a GridView.

<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors"

          ColumnHeaderTemplate="{StaticResource OrangeHeaderTemplate}" >

Listing 5

The output of listing looks like Figure 3.

GridViewImg3.gif

Figure 3

Summary

This article was an introduction of using a GridView in WPF. I will be discussing more GridView related functionality in my forthcoming articles.

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:
Discover the top 5 tips for understanding .NET Interop
Become a Sponsor
 Comments
Thanks by Tarik On November 9, 2009
Thanks for this nice article. Please keep posting new articles as well.
Reply | Email | Modify 
"GridView" for WPF coming in VS2010 by Riaan On November 20, 2009
Hi,

Good news, there is a DataGrid control in VS2010 Beta2.

Cheers
Reply | Email | Modify 
Thanks by arfan On April 23, 2010
nice clean article.
Thanks for posting.
Reply | Email | Modify 
remove empty column by Daniel On May 11, 2010
The default behavior draws a separator after your final column (MVP in this example), followed by an empty column. Is there a way to make your GridView never show this empty column and still have a resizing capabality?
Reply | Email | Modify 
Good Document for fresher by mukul On August 12, 2010
Good Document for fresher
Reply | Email | Modify 
binding data into grid from database in wpf application by Mahi On November 15, 2010
can u pls help me on this.....

i am creating one registration wpf application....
In that first window customer need to register with his personal details.....once he will submit those details they will store in db....
and in 2 nd window one grid,text box and one search button is there.....when customer is entering some db cust name when we click on search i should get that particular customer data in the grid.....i wrote the below code but still am not finding any data in the grid.....
fallowing code i tried pls chk................


//dgNames.ColumnDefinitions.Add(1);

            SqlConnection con = new SqlConnection("server=.;database=MyApp;uid=sa;pwd=sa;");
            SqlDataAdapter da = new SqlDataAdapter("select FirstName from Registration where FirstName='" +txtCustName.Text.Trim() + "'", con);
            SqlDataReader dr;
            con.Open();
            DataSet ds = new DataSet();

            da.Fill(ds, "Names");
            dgNames.DataSource = ds;
            dgNames.DataBind();


dgNames.DataContext = ds;
            this.DataContext = ds.Tables[0].DefaultView;

here when i build this code it is successful but when am debugging that it not deplaying any thing in the Grid...........please help as early as possible..................
Reply | Email | Modify 
Re: binding data into grid from database in wpf application by Mahesh On November 17, 2010
Did you debug DS if there is any data coming from the database?
Reply | Email | Modify 
how to access data in row/column by Craig On January 5, 2011
Thanks! This helped me. But if I click on a row and want to access the value in a column, how to I do that in codebehind?
Reply | Email | Modify 
great article by Mojalefa On January 7, 2011
thanks for this
Reply | Email | Modify 
Sorted columns by Vincent On March 30, 2011
Hi Mahesh, In your MenuItem_Click event method, how do you know the column on which event is fired ? Thanks Vince
Reply | Email | Modify 
how to display without binding by shriram On April 9, 2011
you have qouted this example by binding the gridview to specific examples like name ,,,,how to do it without binding ?..the header and entries should be displayed dynammically based on the requirement.i hope you are getting my point example: if my query is select name the result should be only one column as name wit entries below it if my query is select name,id the result should be 2 columns and so on please help !!!!
Reply | Email | Modify 
WPF GridView or DataGrid by Shai On May 23, 2011
Hello, I am trying to put dataGrid(Gridview) in vertical order. This datagrid works similar to data entry form but user will be editing data instead of entering new one. user should be able to borwse/edit using pagination, so we need to display one dataset at a time. I must be able to create DataGrid dynamically since column name (e.g. FirstName, LastName...250+ columns, is stored in database table). Each column's value could be edited differently. For example if column-name is Age then user should be able to pick some age from Drop down box. See example below. FristName | Steve LastName | Ronald Age | 25 ==> DropDownbox with value from 1- 100 Sex | Male ==> DropDownbox with value of Male and Female Employed | Yes ==> check box and so on Any help is highly appreciated
Reply | Email | Modify 
Very much useful by ujwal On October 18, 2011
Thanks for this article. Its solved my half of the problem.... Thank you very much.
Reply | Email | Modify 

 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.