【发布时间】:2015-05-19 20:43:47
【问题描述】:
我有一个绑定到 GridView 的 SqlDataSource,其 SQL 需要大约 10 秒来检索数据。
还有一个名为“PageSizeControl”的用户控件,它挂钩了 GridView 的 SqlDataSource 的选定事件。在这种情况下,我需要DataTable来准备PageSizeControl的一些设置。
目前,我正在使用以下代码:
protected void ds_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
SqlDataSourceView dsv = (sender as SqlDataSourceView);
dsv.Selected -= ds_Selected;
DataTable dt = (dsv.Select(DataSourceSelectArguments.Empty) as DataView).Table;
int iRowCount = dt.Rows.Count;
// some gui-adaption like visibility, text, ...
}
在旧版本中,我们使用 e.AffectedRows。但是当过滤器应用于数据源时,存储在 e.AffectedRows 中的值不正确。我们有一些用例,我们不仅需要行数,还需要整个 DataTable。
问题是,.Select() 重新执行 Db-Query,这需要另外 10 秒才能完成。
我还尝试打开 SqlDataSource 的缓存:
EnableCaching="true" CacheDuration="Infinite"
但这没有帮助有两个原因: 1.访问缓存数据时不触发OnSelected事件 2. 如果触发了 OnSelected 事件(因为尚未缓存数据),.Select() 仍然在未缓存的情况下执行,需要 10 秒。
是否有人知道我如何在不费时地重新执行查询的情况下获取数据?最好是在 OnSelected 中,但我愿意接受其他建议。
【问题讨论】:
标签: c# asp.net gridview sqldatasource