【问题标题】:Datatable in ASPX Used As DataSource For Multiple User ControlsASPX 中的数据表用作多个用户控件的数据源
【发布时间】:2009-11-11 19:27:11
【问题描述】:
在一个 ASPX 页面中,我加载了 7 个用户控件。在每个用户控件中都有数据绑定控件(例如 gridview)。
目前每个用户控件都会运行一个查询来返回数据。每个用户控件返回的数据都是相同的,我过滤掉了每个用户控件需要显示的内容。所以同一个查询运行了 7 次(是的,我知道)。
我想做的是在 ASPX 页面中创建数据表,然后允许每个 gridview 使用该数据表作为其数据源,这样查询只运行一次。
如果有任何帮助,我将不胜感激。
【问题讨论】:
标签:
c#
asp.net
recursion
datasource
【解决方案1】:
也许您可以在获取数据表的用户控件中公开一个属性。在包含用户控件的页面上,设置属性。
【解决方案2】:
您可以在每个控件(例如 List)上设置一个公共属性并在 aspx 页面中运行查询并将其传递给控件
【解决方案3】:
七个 GridView 太过分了,会严重影响页面的性能。在您的主页中抓取数据一次。然后您可以在用户控件上设置属性并在每个用户控件中以表格格式显示。
【解决方案4】:
我认为您正在考虑的方法会导致您做很多额外的工作。最好先缓存数据表,然后在每个用户控件执行查询之前,先检查缓存。如果您从缓存中获取数据表,您可以使用它来执行操作。否则,您执行查询并从数据库中获取数据表。这样现有的东西就可以工作,你会用最少的努力得到想要的结果。
【解决方案5】:
如果您的用户控件公开了一个允许将 DataTable 分配给它的属性,您应该能够通过只运行一次查询来提供该功能:
// In your ASPX page
DataTable dt = new DataTable()
... // populate the table from the database
userControl1.Source = dt;
userControl2.Source = dt;
...
userControl7.Source = dt;
// In your user controls
// Assumes a GridView called myGridView
public DataTable Source
{
set
{
myGridView.DataSource = value; //or hold it somewhere else
}
}
这不是有史以来最有效的代码,但这样您只会执行一次查询。