我有一个网格视图,它有数据绑定列和模板列。我不会在这里粘贴整个XML代码,但基本上这里是每列的分解:
- 项目ID(数据绑定列)
- 项目类别(数据绑定列)
- 项目子类别(数据绑定列)
- 项(数据绑定列)
- 订单数量(文本框-无边界模板字段)
- 供应商(DropDownList无界模板字段)**
- 项目成本(文本框-无边界模板字段)
- 付费(复选框-无边界模板字段)
gridview检索所有记录,并仅按所选类别进行筛选(因此每个类别只提取大约70条记录,因此并不庞大)。
在SSMS中,这需要0秒才能执行。
在ASP.net中大约需要20秒。
更糟糕的是,供应商下拉列表目前是一个空白字段。然而,当我实际将此代码添加到源代码中时:
<ItemTemplate>
<asp:DropDownList ID="ddSupplier" runat="server" DataSource="<%# PopulateControls() %>"
DataTextField="SupplierName" DataValueField="SupplierName" />
</ItemTemplate>
<ControlStyle BorderStyle="Solid" />
<HeaderStyle HorizontalAlign="Left" VerticalAlign="Middle" />
<ItemStyle BorderStyle="None" HorizontalAlign="Left" VerticalAlign="Middle"
Width="50px" />
</asp:TemplateField>
然后,检索所有值大约需要60秒。
我的问题:
- 有没有一种更快的方法可以通过gridview中的基本选择脚本提取值
- 有一个或多个带有绑定字段的模板有问题吗?我有其他只包含数据绑定列的数据网格,它们执行得很快
帮助?
如果看不到后面的代码,我只能说这么多。但已经存在一些问题。
一个网格视图中的70行并不小。网格在ViewState中存储了大量数据。如果可能,对数据进行分页。如果没有,请尝试将会话用于ViewState。
ddSupplier
的数据源可能相同。在RowDataBound
上设置
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (gv.EditIndex == e.Row.RowIndex &&
e.Row.RowType==DataControlRowType.DataRow)
{
DropDownList ddSupplier= (DropDownList)e.Row.FindControl("ddSupplier");
//bind the control
//MySuppliers would be read and kept in Session on first page load
ddSupplier.DataSource = MySuppliers;
}
}
模板绑定字段不是问题。
通过分析代码并查看这20秒的实际使用情况,您可以更好地理解问题。