在网格的 ItemDataBound 事件中填充 Column 中的 DropDownList,而无需每次访问数据库

Populate DropDownList in Column within grid's ItemDataBound event without accessing the database each time

我在 ASP.NET 中有一个网格,其中有一列包含 DropDownLists。

下面是网格的示例:
项目列 | DropDownCol
项目 1 |下拉列表
项目 2 |下拉列表
第 3 项 |下拉列表

我知道用其值填充每个 DropDownList 的唯一方法是在网格的 ItemDataBound 事件中,如下所示:

if (e.Item is GridDataItem)
{
    GridDataItem item = (GridDataItem)e.Item;
    IEnumerable<ProductCategory> productCategoryList = ProductService.GetProductCategories();

    RadComboBox cbProductCategory = item.FindControl("cbProductCategory") as RadComboBox;
    cbProductCategory.DataValueField = "Id";
    cbProductCategory.DataTextField = "CategoryName";
    cbProductCategory.DataSource = productCategoryList;
    cbProductCategory.DataBind();
}

由于我们处于 ItemDataBound 事件中,因此每次调用 GetProductCategories 函数时我都会调用数据库。

获取我的产品类别列表,将其存储在某处,然后使用存储的版本来绑定每个 DropDownList 的最佳方法是什么?

您可以在代码隐藏文件中创建一个字段,然后在 Page_Load 中用信息填充 productCategoryList。这样你只能在 page_load.

上访问数据库
private IEnumerable<ProductCategory> productCategoryList;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
         productCategoryList = ProductService.GetProductCategories();
    }
}

然后就像您拥有的那样进行数据绑定。