C# 如何避免为每个新行调用数据源函数
我正在尝试添加以下网格视图的可变线, 例如,如果我选择5,编译器调用GetAllProducts 5次。 如何避免这种情况并一次调用GetAllProducts 实际上每个RadComboBox都有50000多个,所以我也需要离开以避免内存异常。 那么,如何避免为每一个新行调用数据源函数呢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
<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甚至可以清空数据,然后对每个组合框使用按需加载。您甚至可以避免最初为组合设置数据源,只需定义按需加载设置,以便用户展开后它才会获取数据。