使用 ASP.net 2.0,我如何向用户呈现类似于 SO 上的问题列表的信息,其中每个问题都有一些子项(如标签)。
我可能会进行两个单独的查询,一个首先查找问题列表,然后另一个查询查找属于问题列表的所有标签。
方法 1:
然后我可能会使用嵌套转发器并在每个嵌套转发器“OnItemDataBind”的代码隐藏中执行选择语句...
方法 2:
或者对于这两个数据集,我会使用 C# 代码为每个“问题”创建一个业务实体,并拥有一个名为“标签”的属性。然后我会遍历我的标签数据集并分配属性。
什么更有效率?还有其他选择吗?
最佳答案
我肯定会避免第二种方法——您不想在每次对父项进行数据绑定(bind)时访问数据库。正如 DOK 所说,请尝试正确构建您的系统。对我来说,这意味着填充业务对象的集合并绑定(bind)到它。我用自定义菜单控件做了类似的事情(注意这嵌套了三个数据列表,但你可以使用中继器):
在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();
}
此方法基本上获取对被绑定(bind)对象的引用 (parentList.DataItem),然后将嵌套的 DataList 绑定(bind)到子项 (_menu.GetChildItems(item))
关于c# - DataBind 具有子相关内容的列表的最佳方式(例如,带有标签的 SO 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276126/