如何在C#中创建全局dataTable?

时间:2016-07-28 10:43:47

标签: c# asp.net datatable

我需要在我的.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!

     }

3 个答案:

答案 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;

仅此而已。