如何在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!
     }

如何在C#中创建全局数据表

这就是条件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;

仅此而已。