0

我有一个具有数据绑定和模板列的网格视图。我不会在这里粘贴整个 XML 代码,但基本上这里是每一列的细分:

  • 项目 ID(数据绑定列)
  • 项目类别(数据绑定列)
  • 项目子类别(数据绑定列)
  • 项目(数据绑定列)
  • 订单数量(文本框 - 无界模板字段)
  • 供应商(DropDownList 无界模板字段)**
  • 项目成本(文本框 - 无界模板字段)
  • 付费(复选框 - 无界模板字段)

网格视图仅按所选类别检索所有记录和过滤器(因此每个类别仅提取约 70 条记录 - 所以它不是巨大的)。

在 SSMS - 这需要 0 秒来执行。

在 ASP.net 中大约需要 20 秒。

更糟糕的是,供应商 DropDown 目前是一个空白字段。但是,当我实际将此代码添加到源代码时:

<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 秒。

我的问题:

  1. 有没有更快的方法通过gridview中的基本选择脚本来提取值?
  2. 有 1 个或多个带有绑定字段的模板是否有问题?我有其他只包含数据绑定列的数据网格,它们执行得非常快。

帮助?

4

1 回答 1

0

没看到你后面的代码,我只能说这么多。但是已经有一些问题了。

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 秒的实际使用情况。

于 2012-09-10T04:31:09.777 回答