Excel DataSource

December 19, 2008 Digital Experience
In Sitefinity, you can bind data to a variety of data sources and one of those options is MS Excel. Although there is no data source control, you can bind a RadGrid to MS Excel programmatically using ADO.NET. The process involves connecting to the Excel sheet, select data, loading it into a dataset and binding the RadGrid. In this scenario, you want to use the NeedDataSource event. Here is the sample C# code:

 

 

using System; 
using System.Data.OleDb; 
using System.Data; 
 
public partial class Files_RadGridExcelDataSource : System.Web.UI.UserControl 
    protected void Page_Load(object sender, EventArgs e) 
    { 
 
    } 
    protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e) 
    { 
        // Create a new Adapter 
        OleDbDataAdapter objDataAdapter = new OleDbDataAdapter(); 
 
        // retrieve the Select command for the Spreadsheet 
        objDataAdapter.SelectCommand = ExcelConnection(); 
 
        // Create a DataSet 
        DataSet objDataSet = new DataSet(); 
 
        // Populate the DataSet with the spreadsheet worksheet data 
        objDataAdapter.Fill(objDataSet); 
 
        // Bind the data to the RadGrid
        RadGrid1.DataSource = objDataSet.Tables[0].DefaultView; 
    } 
    protected OleDbCommand ExcelConnection() 
    { 
        // Connect to the Excel Spreadsheet 
        string xConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
        "Data Source=" + Server.MapPath(@"~\Files\Test.xls") + ";" + 
        "Extended Properties=Excel 8.0;"
        // create your excel connection object using the connection string 
        OleDbConnection conn = new OleDbConnection(xConnStr); 
        conn.Open(); 
 
        // use a SQL Select command to retrieve the data from the Excel Spreadsheet 
        // the "table name" is the name of the worksheet within the spreadsheet 
        // in this case, the worksheet name is "Customers" and is coded as: [Customers$] 
        OleDbCommand objCommand = new OleDbCommand("SELECT * FROM [Customers$]", conn); 
        return objCommand; 
 
    } 
 

 

Special thanks to Nannette Thacker and her detailed code samples. A VB.NET sample is also available on her site. For more info on uploading user controls, please read this article.

The Progress Team