Reputation:
I have a Grid in an ASP.NET page and I have an Export button. When the Export button is clicked it executes the method below and fills the Excel document with the data from the Grid. But it only fills it with data that is on Page 1. If I have 100 items and 10 pages it just does page one. I would think it would do all and not just the ones displayed. Any idea why it would do this?
Thanks
private void fillDocument()
{
string lFilename = Leads.xls";
string lDistributorFolder = Server.MapPath(".") + "\\Portals\\0\\Distributors\\" + _currentUser.UserID.ToString() + "\\";
string lTemplateFolder = System.Configuration.ConfigurationManager.AppSettings["Templates"];
System.IO.Directory.CreateDirectory(lDistributorFolder);
File.Copy(lTemplateFolder + lFilename, lDistributorFolder + lFilename, true);
string lConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + lDistributorFolder + "\\" + lFilename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
DbProviderFactory lFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
int lSequence = 0;
using (DbConnection lConnection = lFactory.CreateConnection())
{
lConnection.ConnectionString = lConnectionString;
lConnection.Open();
foreach (GridDataItem lItem in grdLeadList.Items)
{
lSequence++;
using (DbCommand lCommand = lConnection.CreateCommand())
{
lCommand.CommandText = "INSERT INTO [Leads$] ";
lCommand.CommandText += "(F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21) ";
lCommand.CommandText += "VALUES(";
lCommand.CommandText += "\"" + lSequence.ToString() + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gLeadNumber].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gSource].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gAccountName].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gCreatedOn].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gContactFullName].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gPriority].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gStreet1].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gStreet2].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gZIP].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gCity].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += "\"" + lItem.Cells[_gState].Text.Replace(" ", " ") + "\",";
lCommand.CommandText += ")";
lCommand.ExecuteNonQuery();
}
}
lConnection.Close();
}
}
Upvotes: 0
Views: 131
Reputation: 8166
When the grid is bound, only the items that are visible are actually bound to the grid. When you use paging, usually another call to the underlying data source is made (you usually have to handle this with the paging yourself)
If you want to display all of the data, when they click the Export button, you should reload your datasource and base the export off from the entire datasource
Upvotes: 1
Reputation: 219096
Is the grid being used to edit or manipulate the data in any way? Generally it would be better to export the values from the data from which the grid is populated, not from the grid itself.
After all, if the grid has paging, then the actual grid being displayed contains only the single page of data. But the data source from which it is populated contains everything.
Export from the data source, not from the UI controls.
Upvotes: 2