【发布时间】:2010-07-01 18:17:39
【问题描述】:
我有一个中继器,可以显示各种股票的财务数据和价格。
在这个页面上,我还有一个“导出”按钮,需要将数据~在屏幕上~转换成CSV供用户使用。
问题是,在我对“库存”实体列表进行数据绑定后:
List<Stock> stocks = GetStocks()
rptStockList.DataSource = stocks;
rptStockList.DataBind();
回发时数据不会持久化。
此外,此页面上的数据通过 UpdatePanel 和 Timer 控件不断更新(每次都重新绑定数据)。中继器控件中显示的各种股票的价格每 30 秒变化一次。
现在,我有一个链接按钮,它在代码隐藏中有一个点击事件方法,应该为用户导出屏幕上的~数据~。我需要获取上次数据绑定到中继器的股票列表的当前值。我不能简单地从数据库中获取最新值,因为这些值会在上次刷新之间发生变化。
protected void lbtnExportStocks_Click(object sender, EventArgs e)
{
// No longer have the stock data used in the repeater control
ExportStocksToExcel();
}
我知道 ASP.NET 不会在回发时保留转发器的数据源,但我仍然需要能够重新构建这个 Stock 实体列表,以便我可以向它们发送 CSV,或者我需要持久化以某种方式。
我不想做任何在性能方面过于繁重的事情,因为在一周的某些日子里,这个应用程序可能会被大量使用。
这种情况的正确解决方案是什么?我应该遍历中继器的“项目”集合并重建 Stock 实体吗?
【问题讨论】:
-
我认为您需要发布一些关于
ExportStocksToExcel()究竟做了什么的信息,因为转发器不应丢失绑定到它的数据(假设您没有禁用控件或页面上的视图状态)因为视图状态。但是,如果这是您所期望的(或至少以任何合理的方式),您不能从中继器的数据源中向后读取数据。 -
@Chris Marisic,鉴于我上面写的内容,您个人如何从中继器取回数据以输出 CSV?
-
@Chris Marisic,到目前为止,所有 ExportStocksToExcel() 所做的只是设置正确的标题和内容类型,然后我打算用 CSV 数据写出响应。但是,我很难弄清楚如何取回这些数据。
-
@Chris 我认为丢失中继器中绑定的数据的情况不如希望中继器绑定来自的原始数据。我猜
Stock主要是一个股票代码和一个价格,所以你可能可以重建Stocks但就像你说的那样,它会有点丑:-)
标签: asp.net ajax postback repeater