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

C

chike_oji

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.GetAllStockDetails();
//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
}
}
 
K

Kevin.Li

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.
 
N

Nicholas Paldino [.NET/C# MVP]

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]
- (e-mail address removed)

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.GetAllStockDetails();
//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
}
}
 
C

chike_oji

Thank you everybody for your responses. I was able to progress with
the advice
I got from you all.

Regards
chike.
    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 itwhen
saving.

--
          - Nicholas Paldino [.NET/C# MVP]
          - (e-mail address removed)




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.GetAllStockDetails();
       //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
   }
}- Hide quoted text -

- Show quoted text -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top