保存数据记录并再次使用它,而无需再次查询数据库

时间:2016-04-19 06:31:14

标签: c# asp.net datatable

我有两个控件,分别是“搜索”按钮和“导出”按钮。用户将“搜索”数据并将数据插入到DataTable中并绑定到GridView或Repeater,然后当用户单击“导出”时,DataTable将传递到将使用DataTable中的数据生成Excel文件的类中

在我当前的代码中,“搜索​​”按钮和“导出”按钮都将查询以从数据库中获取数据。但我需要的只是搜索按钮,它将查询并将数据存储到DataTable或其他东西,当点击导出按钮时,它将使用早期数据生成Excel文件。

这是我目前的代码: Report.aspx                       

    <asp:GridView ID="GridView1" runat="server">
        <Columns>
        </Columns>
    </asp:GridView>
</body>

Report.aspx.cs

protected void Page_Load(object sender, EventArgs e)
        {
            /* Page load */
        }

protected void btn_search_Click(object sender, EventArgs e)
        {
            DataTable dt = GetData();
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }

protected DataTable GetData()
    {
        DataTable dataTable = new DataTable();
        /* Query operation */
            adapter.Fill(dataTable);
        return dataTable;
    }

protected void btn_export_Click(object sender, EventArgs e)
    {
        var excelClass = new ExcelClass();
        excelClass.ExcelData = GetData();
    }

我尝试在“Report.aspx.cs”中创建一个DataTable作为属性,并在单击“搜索”时将其填入数据中。但是当我导出时,DataTable再次为空。

DataTable dataTable = new DataTable();
protected void Page_Load(object sender, EventArgs e)
        {
            /* Page load */
        }

protected void btn_search_Click(object sender, EventArgs e)
        {
            GetData();
            GridView1.DataSource = dataTable ;
            GridView1.DataBind();
        }

protected void GetData()
    {
        /* Query operation */
            adapter.Fill(dataTable);
    }

protected void btn_export_Click(object sender, EventArgs e)
    {
        var excelClass = new ExcelClass();
        excelClass.ExcelData = dataTable;
    }

但是,我需要在点击搜索时只获取一次数据,并在导出时再次使用数据,因此它不会向数据库查询两次。

1 个答案:

答案 0 :(得分:1)

如下所述,有三种方法可以实现此目的。

  
      
  1. 使用会话
  2.   

您可以使用会话,但这会影响应用程序/页面的性能,例如,如果dataTable包含10,000条记录。

将dataTable添加到会话中:

DataTable dataTable= new DataTable();

dataTable= GetData();

Session.Add("dataTable", dataTable);

从会话中回复该数据表:

DataTable dataTable = Session["dataTable"] as DataTable

DataTable dataTable= (DataTable)Session["dataTable"];
  
      
  1. 将GridView1.DataSource导出到dataTable
  2.   
DataTable dataTable= Gridview1.DataSource as DataTable;
  
      
  1. 将每行从GridView迭代到DataTable
  2.   
//Create a new DataTable.
DataTable dataTable = new DataTable();

//Add columns to DataTable.
foreach (TableCell cell in GridView1.HeaderRow.Cells)
{
    dataTable.Columns.Add(cell.Text);
}

//Loop through the GridView and copy rows.
foreach (GridViewRow row in GridView1.Rows)
{
    dataTable.Rows.Add();
    for (int i = 0; i < row.Cells.Count; i++)
    {
        dataTable.Rows[row.RowIndex][i] = row.Cells[i].Text;
    }
}