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

本文关键字:数据库 访问 DropDownList ItemDataBound 网格 事件 填充 | 更新日期: 2023-09-27 17:57:02

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

下面是网格外观的示例:
项目Col |下拉科尔
项目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 事件中,因此每次调用 GetProductCategory 函数时,我都会调用数据库。

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

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

您可以在代码隐藏文件中创建一个字段,并在Page_Load用该信息填充 productCategoryList。这样,您只能在page_load上访问数据库。

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

然后,只需像拥有数据一样执行数据绑定即可。