首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高效绑定嵌套中继器3层

高效绑定嵌套中继器3层
EN

Stack Overflow用户
提问于 2011-12-10 11:24:50
回答 1查看 3.9K关注 0票数 2

我有3层深度的中继器,它们绑定到以下内容:

MainCategories -绑定到顶部中继器

SubCategories -绑定到第二层的中继器

SubSubCategories -绑定到第三层的中继器

到目前为止,我通过使用中继器的itemdatabound事件并传递类别id来获得数据绑定,以便过滤下面的级别(例如:获取MainCategory 1的所有SubCategories,获取MainCategory2的所有子类别)。这当然会导致多次访问数据库,而且效率很低。

有没有办法只做3个查询: 1.获取所有主要类别并绑定到顶级转发器,2.获取所有子类别并以某种方式绑定到二级中继器3.获取所有子类别并绑定到第三级中继器。

如何在asp.net c#中实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-10 12:20:16

为此,请执行以下步骤:

首先,将数据放入DataTable,比如dataTableMainCategories,然后从dataTableMainCategories数据表中过滤SubCategoriesSubSubCategories。最后,在write before代码块中,对于SubCategoriesSubSubCategories DataTable,在导入筛选行之前添加所需的列。

将所有主要类别填充到表中,并绑定到MainCategory中继器(rptrMainCategories)和将所有子类别和子子类别填充到dataTableCategories数据表中。

代码语言:javascript
运行
复制
protected void rptrMainCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if(e.Item.ItemType== ListItemType.Item)
    {
        int subCategoryID = 5; // Pass your subcategory id to be filtered
        Repeater rptrSubCategories = (Repeater)e.Item.FindControl("rptrSubCategories");
        DataTable dtSubCategory = new DataTable();
        dtSubCategory.Columns.Add(); // Add your columns as SubCatagory
        DataRow[] dataRows = dataTableCategories.Select("SubCategoryID= " + subCategoryID + "");
        foreach (DataRow dataRow in dataRows)
        {
            dtSubCategory.ImportRow(dataRow);
        }
        rptrSubCategories.DataSource = dtSubCategory;
        rptrSubCategories.DataBind();
    }
}

protected void rptrSubCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if(e.Item.ItemType== ListItemType.Item)
    {
        int subSubCategoryID = 55; // Pass your subsubcategory id to be filtered
        Repeater rptrSubSubCategory = (Repeater)e.Item.FindControl("rptrSubSubCategory");
        DataTable dtSubSubCategory = new DataTable();
        dtSubSubCategory.Columns.Add(); // Add your columns as SubCatagory
        DataRow[] dataRows = dataTableCategories.Select("SubSubCategoryID= " + subSubCategoryID + "");
        foreach (DataRow dataRow in dataRows)
        {
            dtSubSubCategory.ImportRow(dataRow);
        }
        rptrSubSubCategory.DataSource = dtSubSubCategory;
        rptrSubSubCategory.DataBind();
    }
}

更新

如果您使用类型化(自定义类型化)数据,则可以通过以下方式选择数据:

代码语言:javascript
运行
复制
//Populate all main categories
public List<Category>  MainCategories { get; set; }

//Populate all sub and sub categories
public List<Category> SubCategories { get; set; }

在活动rptrMainCategories_ItemDataBound上,编写以下代码并绑定到中继器:

代码语言:javascript
运行
复制
List<Category> subCategory = SubCategories.Where(c => c.SubCategoryId = yourSubCategoryID);
rptrSubCategories.DataSource = subCategory ;
rptrSubCategories.DataBind();

在活动rptrSubCategories_ItemDataBound上,编写以下代码并绑定到中继器:

代码语言:javascript
运行
复制
List<Category> subSubCategory = SubCategories.Where(c => c.SubSubCategoryId = yourSubSubCategoryID);
rptrSubSubCategory.DataSource = subSubCategory ;
rptrSubSubCategory.DataBind();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8454129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档