DataBind Google Sheets Data to the DevExpress Data Grid

Ready to get started?

Download a free trial:

Download Now

Learn more:

Google Sheets ADO.NET Provider

Easily connect .NET applications with real-time data from spreadsheets stored in Google Docs. Use Google Sheets to manage the data that powers your applications.



Use the CData ADO.NET Provider for Google Sheets with the DevExpress Windows Forms and Web controls to provide Google Sheets data to a chart.

The CData ADO.NET Provider for Google Sheets implements standard ADO.NET data access components that can be used with third-party controls. The standard ADO.NET process for databinding can be followed to enable bidirectional access to live data from UI controls. In this article we show how to use the CData components to databind to the DevExpress Windows Forms and Web controls; you will databind to a chart that displays current data.

You can connect to a spreadsheet by providing authentication to Google and then setting the Spreadsheet connection property to the name or feed link of the spreadsheet. If you want to view a list of information about the spreadsheets in your Google Drive, execute a query to the Spreadsheets view after you authenticate.

ClientLogin (username/password authentication) has been officially deprecated since April 20, 2012 and is now no longer available. Instead, use the OAuth 2.0 authentication standard. To access Google APIs on behalf on individual users, you can use the embedded credentials or you can register your own OAuth app.

OAuth also enables you to use a service account to connect on behalf of users in a Google Apps domain. To authenticate with a service account, you will need to register an application to obtain the OAuth JWT values.

See the Getting Started chapter in the help documentation to connect to Google Sheets from different types of accounts: Google accounts, Google Apps accounts, and accounts using two-step verification.

Windows Forms Controls

The code below shows how to populate a DevExpress chart with Google Sheets data. The GoogleSheetsDataAdapter binds to the Series property of the chart control. The Diagram property of the control defines the x- and y-axes as the column names.

using (GoogleSheetsConnection connection = new GoogleSheetsConnection( "Spreadsheet=MySheet;InitiateOAuth=GETANDREFRESH")) { GoogleSheetsDataAdapter dataAdapter = new GoogleSheetsDataAdapter( "SELECT Shipcountry, SUM(OrderPrice) FROM Orders GROUP BY Shipcountry", connection); DataTable table = new DataTable(); dataAdapter.Fill(table); DevExpress.XtraCharts.Series series = new DevExpress.XtraCharts.Series(); chartControl1.Series.Add(series); series.DataSource = table; series.ValueDataMembers.AddRange(new string[] { "OrderPrice" }); series.ArgumentScaleType = DevExpress.XtraCharts.ScaleType.Qualitative; series.ArgumentDataMember = "Shipcountry"; series.ValueScaleType = DevExpress.XtraCharts.ScaleType.Numerical; chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; ((DevExpress.XtraCharts.SideBySideBarSeriesView)series.View).ColorEach = true; }

Web Controls

The code below shows how to populate a DevExpress Web control with Google Sheets data. The GoogleSheetsDataAdapter binds to the Series property of the chart; the Diagram property defines the x- and y-axes as the column names.

using DevExpress.XtraCharts; using (GoogleSheetsConnection connection = new GoogleSheetsConnection( "Spreadsheet=MySheet;InitiateOAuth=GETANDREFRESH")) { GoogleSheetsDataAdapter GoogleSheetsDataAdapter1 = new GoogleSheetsDataAdapter("SELECT Shipcountry, SUM(OrderPrice) FROM Orders GROUP BY Shipcountry", connection); DataTable table = new DataTable(); GoogleSheetsDataAdapter1.Fill(table); DevExpress.XtraCharts.Series series = new Series("Series1", ViewType.Bar); WebChartControl1.Series.Add(series); series.DataSource = table; series.ValueDataMembers.AddRange(new string[] { "OrderPrice" }); series.ArgumentScaleType = ScaleType.Qualitative; series.ArgumentDataMember = "Shipcountry"; series.ValueScaleType = ScaleType.Numerical; ((DevExpress.XtraCharts.SideBySideBarSeriesView)series.View).ColorEach = true; }