我需要在我的.net项目中使用全局dataTable。但是,我无法在两种方法之间处理它..
在我的示例中,dt1是全局dataTable,dt2是本地的,dt2直接用来调用另一个方法。
结果: dt1:我不知道如何描述它,它喜欢excel中的整个html页面。
dt2:非常好!
你能告诉我为什么dt1错了吗?它应该是完美的...... 我的代码:
private DataTable dt1;// same result as public DataTable dt1{ get; private set; }""
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)),
new DataColumn("LongURL", typeof(string)),
new DataColumn("CreatingDate",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
dt1 = dt;
}
}
protected void Btn_Click(object sender, EventArgs e)
{
DataTable dt2 = new DataTable();
dt2.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)),
new DataColumn("LongURL", typeof(string)),
new DataColumn("CreatingDate",typeof(string)) });
dt2.Rows.Add(1, "John Hammond", "United States");
dt2.Rows.Add(2, "Mudassar Khan", "India");
dt2.Rows.Add(3, "Suzanne Mathews", "France");
dt2.Rows.Add(4, "Robert Schidner", "Russia");
exportToExcel(dt1);// fail :(
exportToExcel(dt2);// success!
}
答案 0 :(得分:1)
这是条件if (!Page.IsPostBack)
的原因,并且因为在回发发生时按钮点击事件中你没有重新加载或填充dt1
,因为它是带有新页面的新页面请求实例dt1
不再存在。完全删除该条件并测试
private DataTable dt1;
protected void Page_Load(object sender, EventArgs e)
{
dt1 = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)),
new DataColumn("LongURL", typeof(string)),
new DataColumn("CreatingDate",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
}
(或)将您的数据表存储到session
并重新使用
session["dt"] = dt1;
if(session["dt"] != null)
exportToExcel((DataTable)session["dt"]);
答案 1 :(得分:0)
我们不清楚您对全局的定义是什么(包含示例的页面或您所说的整个项目)所以我使用了3种不同的方法来保留此示例中的内容。 导出失败,因为在PostBack上丢失了dt1的内容。
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)),
new DataColumn("LongURL", typeof(string)),
new DataColumn("CreatingDate",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
ViewState["yourTable"] = dt;
// or
Session["yourTable"] = dt;
// or
Application["yourTable"] = dt;
}
protected void Btn_Click(object sender, EventArgs e)
{
DataTable dt2 = new DataTable();
dt2.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)),
new DataColumn("LongURL", typeof(string)),
new DataColumn("CreatingDate",typeof(string)) });
dt2.Rows.Add(1, "John Hammond", "United States");
dt2.Rows.Add(2, "Mudassar Khan", "India");
dt2.Rows.Add(3, "Suzanne Mathews", "France");
dt2.Rows.Add(4, "Robert Schidner", "Russia");
if (ViewState["yourTable"] != null)
{
exportToExcel(ViewState["yourTable"] as DataTable);
}
// or
if (Session["yourTable"] != null)
{
exportToExcel(Session["yourTable"] as DataTable);
}
// or
if (Application["yourTable"] != null)
{
exportToExcel(Application["yourTable"] as DataTable);
}
exportToExcel(dt2);
}
答案 2 :(得分:0)
非常简单
首先在form1中声明公共(全局)数据表。
例如: 公共静态数据表dt;
下一步将数据分配给dt
在form2中声明 数据表dt2 = from1.dt;
仅此而已。