小编典典

数据绑定具有子相关内容的列表的最佳方法(例如,SO的带有标签的问题)

sql

使用ASP.net 2.0,我如何向用户显示信息,类似于SO上的“问题”列表,其中每个问题都有一些子项(例如标签)。

我可能会进行两个单独的查询,一个首先查找问题列表,然后另一个查询查找属于问题列表的所有标签。

方法1:

然后,我可能会使用嵌套的转发器,并在每个嵌套的转发器“ OnItemDataBind”上的代码后面执行一条select语句。

方法二:

或使用这两个数据集,我将使用C#代码创建每个“问题”的业务实体,并具有一个称为“标签”的属性。然后,我将遍历标签数据集并分配属性。

有什么更有效的?还有其他选择吗?


阅读 200

收藏
2021-04-14

共1个答案

小编典典

我肯定会避免第二种方法-
您不想每次对父项进行数据绑定时都访问数据库。正如DOK所说,请尝试正确地构建您的系统。对我而言,这意味着填充业务对象的集合并对其进行绑定。我对自定义菜单控件做了类似的操作(请注意,这嵌套了三个数据列表,但是您可以使用转发器):

在aspx页面中:

<asp:DataList ID="dlMenuOne" runat="server" onitemdatabound="dlMenu_ItemDataBound" >
            <ItemTemplate>
             //your object

                <asp:DataList ID="dlMenuTwo"  runat="server" onitemdatabound="dlMenuTwo_ItemDataBound">
                <ItemTemplate>
                //your object's child items

                    <asp:DataList ID="dlMenuThree" runat="server">
                    <ItemTemplate>
                       //child item's child items    
                    </ItemTemplate>
                    </asp:DataList>

                </ItemTemplate>
                </asp:DataList>

            </ItemTemplate>
            </asp:DataList>

然后在后面的代码中:

protected void dlMenu_ItemDataBound(object sender, DataListItemEventArgs e)
{
    DataListItem parentList = e.Item;
    DataList dlMenuTwo = (DataList)parentList.FindControl("dlMenuTwo");
    MenuItem item = (MenuItem)parentList.DataItem;
    dlMenuTwo.DataSource = _menu.GetChildItems(item);
    dlMenuTwo.DataBind();
}

此方法基本上获取对要绑定的对象的引用(parentList.DataItem),然后将嵌套的DataList绑定到子项(_menu.GetChildItems(item))

2021-04-14