Click here to Skip to main content
Click here to Skip to main content

Take the Data of “GRIDVIEW” to Excel. The data is in ItemsSource as AnonymousType, Table or DataView

By , 9 May 2013
 

Introduction

The data of enumerable can be sited or bandied to ItemsSource of GRIDVIEW in WPF or Silverlight. So GRIDVIEW can dynamically show data according to different data of enumerable.
We can take the data to Excel with a special format. To take DataTable to Excel is easy. In here, I have not given much detail. If you want to see the code, you can view my demo.

Background

The data of enumerable can be from TABLE, DATAVIEW or list of “AnonymousType”. DATAVIEW also easily converts to DATATABLE. When you use LINQ to create new data, you get the list of “AnonymousType
e.g.

var qqq = setss.Employees.
            Select(p => new { ww = p.FirstName.Replace("A", " "), we = p.LastName, p.BirthDate });
            gridview_1.ItemsSource = qqq.ToList();

In here, the “gridview_1.ItemsSource“ contains list of “AnonymousType”. We create the method ”Anony2tab” who converts list of “AnonymousType” to table.

Using the Code

The following code converts the data of ItemsSource to DATATABLE and then creates Excel by table data. The method tab2excel converts the datatable to Excel.

Three buttons create type of enumerable data:

Table

var qqq = setss.Employees ;
gridview_1.ItemsSource = qqq;

VIEW

var d_v = setss.Employees.AsDataView();
d_v.RowFilter = "LastName like '%e%'";
d_v.Sort = "Title DESC";
gridview_1.ItemsSource = d_v;

LINQ NEW

var qqq = setss.Employees.
Select(p => new { ww = p.FirstName.Replace("A", " "), we = p.LastName, p.BirthDate });
gridview_1.ItemsSource = qqq.ToList();

The following code is used to convert them to table:

gd2excel g2e = new gd2excel();
            var output_name = System.Environment.CurrentDirectory + @"\aaa.xls";
            if (File.Exists(output_name)) File.Delete(output_name);
            DataTable tb = new DataTable();
            if (gridview_1.ItemsSource.GetType().IsSubclassOf(typeof(DataTable)))
            {
                //  is table 
                tb = (DataTable)gridview_1.ItemsSource;
            }
            else if (gridview_1.ItemsSource.GetType().Name == "List`1")
            {
                // call the mothed Anony2tab
                tb = g2e.Anony2tab(gridview_1.ItemsSource);

            }
            else if (gridview_1.ItemsSource.GetType().IsSubclassOf(typeof(DataView)))
            {
                // convert 
                var qq = (DataView)gridview_1.ItemsSource;
                tb = qq.ToTable();
            }
            else
            {
                MessageBox.Show("for type...  " + gridview_1.ItemsSource.GetType().Name);
                return;
                 
            }
            g2e.TableToExcel(tb, output_name);

from AnonymousType to table:

public DataTable Anony2tab(System.Collections.IEnumerable gd)
        {
            var tb = new DataTable(); 
            foreach (var r_c in gd)
            {
                var prop_s = r_c.GetType().GetProperties();
                if (tb.Columns.Count==0)
                {
                 foreach (var prop in prop_s)
                 {
                     var t_type = prop.PropertyType;
                     var t_name = prop.Name;
                     tb.Columns.Add(t_name, t_type);
                 }
                }
                var n_row = tb.NewRow();
                foreach (var prop in prop_s)
                {
                     var t_name = prop.Name;
                     var t_value = prop.GetValue(r_c, null);
                   
                    n_row[t_name] = t_value;
                }
                tb.Rows.Add(n_row);
            }
            return tb;
        }

AnonymousType” is the list which contains different type (class). GetType() gets one class, the class contains method, property and so on. So each of the values respond to its type and name.

Creates an empty table "TB" and then reads enumerable for each list, and puts them on the table. In reading the first list, it is to establish "TB". "tb.Columns.Count==0" is said that TB is not created.
T_type is the data type.
T_name gets the name of value, we use this name as name of column.

T_value is the data value.
n_row[t_name] = t_value; assigns a value to a column with this name.

So you get the new table.t.

"TableToExcel" is a table into Excel methods. There are many examples on the internet. You can also reference the code in my demo here.

The demo is in WPF C# VS2010 with dataset, not connected with any database.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

wengqian
Web Developer
Italy Italy
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
-- There are no messages in this forum --
Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130513.1 | Last Updated 9 May 2013
Article Copyright 2013 by wengqian
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid