C# 如何避免为每个新行调用数据源函数

C# 如何避免为每个新行调用数据源函数,c#,asp.net,telerik,C#,Asp.net,Telerik,我正在尝试添加以下网格视图的可变线, 例如,如果我选择5,编译器调用GetAllProducts 5次。 如何避免这种情况并一次调用GetAllProducts 实际上每个RadComboBox都有50000多个,所以我也需要离开以避免内存异常。 那么,如何避免为每一个新行调用数据源函数呢 <asp:GridView ID="gvPOAdd" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnRowDeleting

我正在尝试添加以下网格视图的可变线, 例如,如果我选择5,编译器调用GetAllProducts 5次。 如何避免这种情况并一次调用GetAllProducts 实际上每个RadComboBox都有50000多个,所以我也需要离开以避免内存异常。 那么,如何避免为每一个新行调用数据源函数呢

<asp:GridView ID="gvPOAdd" runat="server" ShowFooter="true" AutoGenerateColumns="false" OnRowDeleting="gvPOAdd_RowDeleting">
    <Columns>
        <asp:BoundField DataField="RowNumber" HeaderText="" />
        <asp:TemplateField HeaderText="SKU [ Product Name ]">
                <ItemTemplate>
                    <asp:ObjectDataSource ID="odsSKU" runat="server" TypeName="DotShoppingCart.Commercial.Core.Product" SelectMethod="GetAllProducts " />
                    <telerik:RadComboBox ID="rcbSKU" runat="server" Text='<%#Eval("SKU") %>' CausesValidation="false" EmptyMessage="Type an SKU" DataSourceID="odsSKU" MarkFirstMatch="true" AutoCompleteSeparator=";" Width="550px" data OnSelectedIndexChanged="rcbSKU_SelectedIndexChanged"></telerik:RadComboBox>
                    <br />
                    <asp:RequiredFieldValidator runat="server" ID="rfvSKU" ControlToValidate="rcbSKU" ErrorMessage="SKU Required" ValidationGroup="ProductRequired" />
                </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


private void SetInitialRow()
{
  int numberOfRows =1;
  if(NumberOflinesTextbox.Text!="" && int.Parse(NumberOflinesTextbox.Text.ToString())>0)
      numberOfRows=int.Parse(NumberOflinesTextbox.Text.ToString());
  DataTable dt = new DataTable();
  DataRow dr = null;

  dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
  dt.Columns.Add(new DataColumn("SKU", typeof(string)));
  dt.Columns.Add(new DataColumn("Quantity", typeof(string)));
  dt.Columns.Add(new DataColumn("UnitCost", typeof(string)));
  dt.Columns.Add(new DataColumn("TotalCost", typeof(string)));


    for (int i = 1; i <= numberOfRows; i++)
    {
        dr = dt.NewRow();
        dr["RowNumber"] = i;
        dr["SKU"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["UnitCost"] = string.Empty;
        dr["TotalCost"] = string.Empty;
        dt.Rows.Add(dr);
    }

    Session["CurrentPoTable"] = dt;

    gvPOAdd.DataSource = dt; //I think here Compiler get into GetAllProducts for 5 times 
    gvPOAdd.DataBind();

}


私有void SetInitialRow() { int numberOfRows=1; if(NumberOflinesTextbox.Text!=“和&int.Parse(NumberOflinesTextbox.Text.ToString())>0) numberOfRows=int.Parse(NumberOflinesTextbox.Text.ToString()); DataTable dt=新的DataTable(); 数据行dr=null; 添加(新的数据列(“行数”,typeof(字符串)); 添加(新数据列(“SKU”,类型为(字符串)); 添加(新数据列(“数量”,类型(字符串)); 添加(新数据列(“单位成本”,类型为(字符串)); 添加(新数据列(“总成本”,类型为(字符串));
对于(int i=1;i需要显示后面的代码以供我们帮助)。我认为应该预期您的数据源将被每个组合框实例查询,DATABONCESTASP:DROPPULDLIST也会这样做。考虑返回一些初始虚拟数据,甚至是空数据,然后使用每个组合框的按需加载。甚至可以避免设置数据。最初的组合源,只需定义按需加载程序设置,以便在用户扩展它时只获取数据。您需要显示代码以供我们帮助。我认为应该预料到您的数据源将被每个组合框实例查询,DATABOSTASP:DROPPULDLIST也会这样做。考虑返回一些初始的虚拟数据O。r甚至可以清空数据,然后对每个组合框使用按需加载。您甚至可以避免最初为组合设置数据源,只需定义按需加载设置,以便用户展开后它才会获取数据。