469,646 Members | 1,286 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,646 developers. It's quick & easy.

I lose data, when I try to save a loaded DataTable on the click ofanother button in an asp.net webform

Please can someone help me. I am writing a web application,
that allows for the upload of an excel sheet into the database.
I have an upload button and a save button.

The upload button allows for the retrieval of the excel data into
a DataTable, which is bound to a GridView for previewing before
saving to the Database.

But, whenever I click on the save button, I lose the DataTable's data,
so I lose the data I want to save to the database.

I am using .net framework 2.0, vs2005 professional, win xp
professional
and below is the codebehind file for the page.

Thanks in advance.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using IConceptDBWebUpdate.BLL;

public partial class _Default : System.Web.UI.Page
{
DataTable dtData = null;

public string UploadID
{
get
{
return (ViewState["UploadID"] != null) ?
ViewState["UploadID"].ToString() : string.Empty;
}
set
{
ViewState["UploadID"] = value;
}
}

protected void Page_Load(object sender, EventArgs e)
{
//GridView1.DataSource =
IConceptDBWebUpdate.BLL.StockDetail.GetAllStockDet ails();
//GridView1.DataBind();
}
protected void Upload_Click(object sender, EventArgs e)
{
//DataTable dtData = null;
if (IsValid)
{
UploadID = Guid.NewGuid().ToString();
string path = string.Format("{0}\\{1}.xls",
ConfigurationManager.AppSettings["ExcelFilePath"], UploadID);

try
{

if (UploadExcel.PostedFile == null)
{
throw new Exception("Please select a File to
upload");
}
UploadExcel.PostedFile.SaveAs(path);
//Create query to be passed to the Excel conversion
method.
string sql = "Select * from [stockdetails$]";
//Store data from Excel file in a DataTable
dtData =
MicrosoftExcelClient.ConvertExcelToDataTable(path, sql);
//Bind the GridView to the DataTable to display the
data
GridView1.DataSource = dtData;
GridView1.DataBind();
//TODO: Delete all data in the current stockdetails
table
Upload.Visible = false;
btnSave.Visible = true;
//UploadExcel.Enabled = false;

}
catch (Exception ex)
{
Message.CssClass = "ErrorMessage";
string error = ex.Message.Replace("\n", "<br>");

Message.Text = String.Format("The following error
occured:<BR>{0}", error);
}
finally
{
System.IO.File.Delete(path);
}
}//End of IsValid check
}
protected void Cancel_Click(object sender, EventArgs e)
{

}


protected void btnSave_Click(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
//{

//Loop through the DataTable and add the rows to the
Database table stockdetails.
foreach (DataRow row in dtData.Rows)
{
string company = row["company"].ToString();
string keyword = row["keyword"].ToString();
string stockprice = row["stockprice"].ToString();
string stockworth = row["stockworth"].ToString();
StockDetail.InsertStockDetails(company, keyword,
stockprice, stockworth);

}
//Database update complete.
Message.Text = String.Format("The Database has now been
updated.<BR>");

GridView1.Enabled = false;
//UploadExcel.Enabled = true;

//}//End of IsPostBack block
}
}
Dec 13 '07 #1
2 2826
hey, brother.

The reason you lost your datatable is that:

When you click another button on the page, you will generate *new*
request to the server, which means the code-behind will be re-
executed. therefore :
public partial class _Default : System.Web.UI.Page
{
int test = 0; // Set a break-point here, you
find out everything.
DataTable dtData = null; // When click the btnSave button,
dtData will be assigned to null.
...
...
}

//

Use session to store the dataset is a possible solution, however,
which I know is certainly not effient.

Does anyone have better solution.
Dec 13 '07 #2
The reason for this is that your instance is not maintained between
calls. You are better off getting the data source from the GridView1
(assuming that you are using viewstate, but that will be VERY expensive in
terms of how much data you are moving across the wire) and then working with
that on the save.

Or, you could store the data table in the session, and retrieve it when
saving.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

<ch*******@yahoo.comwrote in message
news:e9**********************************@i29g2000 prf.googlegroups.com...
Please can someone help me. I am writing a web application,
that allows for the upload of an excel sheet into the database.
I have an upload button and a save button.

The upload button allows for the retrieval of the excel data into
a DataTable, which is bound to a GridView for previewing before
saving to the Database.

But, whenever I click on the save button, I lose the DataTable's data,
so I lose the data I want to save to the database.

I am using .net framework 2.0, vs2005 professional, win xp
professional
and below is the codebehind file for the page.

Thanks in advance.

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using IConceptDBWebUpdate.BLL;

public partial class _Default : System.Web.UI.Page
{
DataTable dtData = null;

public string UploadID
{
get
{
return (ViewState["UploadID"] != null) ?
ViewState["UploadID"].ToString() : string.Empty;
}
set
{
ViewState["UploadID"] = value;
}
}

protected void Page_Load(object sender, EventArgs e)
{
//GridView1.DataSource =
IConceptDBWebUpdate.BLL.StockDetail.GetAllStockDet ails();
//GridView1.DataBind();
}
protected void Upload_Click(object sender, EventArgs e)
{
//DataTable dtData = null;
if (IsValid)
{
UploadID = Guid.NewGuid().ToString();
string path = string.Format("{0}\\{1}.xls",
ConfigurationManager.AppSettings["ExcelFilePath"], UploadID);

try
{

if (UploadExcel.PostedFile == null)
{
throw new Exception("Please select a File to
upload");
}
UploadExcel.PostedFile.SaveAs(path);
//Create query to be passed to the Excel conversion
method.
string sql = "Select * from [stockdetails$]";
//Store data from Excel file in a DataTable
dtData =
MicrosoftExcelClient.ConvertExcelToDataTable(path, sql);
//Bind the GridView to the DataTable to display the
data
GridView1.DataSource = dtData;
GridView1.DataBind();
//TODO: Delete all data in the current stockdetails
table
Upload.Visible = false;
btnSave.Visible = true;
//UploadExcel.Enabled = false;

}
catch (Exception ex)
{
Message.CssClass = "ErrorMessage";
string error = ex.Message.Replace("\n", "<br>");

Message.Text = String.Format("The following error
occured:<BR>{0}", error);
}
finally
{
System.IO.File.Delete(path);
}
}//End of IsValid check
}
protected void Cancel_Click(object sender, EventArgs e)
{

}


protected void btnSave_Click(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
//{

//Loop through the DataTable and add the rows to the
Database table stockdetails.
foreach (DataRow row in dtData.Rows)
{
string company = row["company"].ToString();
string keyword = row["keyword"].ToString();
string stockprice = row["stockprice"].ToString();
string stockworth = row["stockworth"].ToString();
StockDetail.InsertStockDetails(company, keyword,
stockprice, stockworth);

}
//Database update complete.
Message.Text = String.Format("The Database has now been
updated.<BR>");

GridView1.Enabled = false;
//UploadExcel.Enabled = true;

//}//End of IsPostBack block
}
}
Dec 13 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Mike L | last post: by
3 posts views Thread by Peter | last post: by
5 posts views Thread by Rod | last post: by
6 posts views Thread by Tejpal Garhwal | last post: by
5 posts views Thread by Aspnot | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.