如何在C#中创建全局数据表
本文关键字:创建 全局 数据表 | 更新日期: 2023-09-27 17:59:00
我需要在.net项目中使用全局数据表。然而,我无法在两种方法之间处理它。。
在我的示例中,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!
}
这就是条件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");
}
(OR)将数据表存储到session
中,并像一样重复使用
session["dt"] = dt1;
if(session["dt"] != null)
exportToExcel((DataTable)session["dt"]);
不清楚您对全局的定义是什么(包含示例或您所说的整个项目的页面),所以我使用了3种不同的方式来保留本示例中的内容。导出失败,因为dt1的内容在PostBack上丢失。
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);
}
非常简单的
首先在form1中声明公共(全局)数据表。
例如:公共静态数据表dt;
接下来将您的数据分配给dt
在表格2中声明数据表dt2=from1.dt;
仅此而已。