c# - DataBind 具有子相关内容的列表的最佳方式(例如,带有标签的 SO 问题)

标签 c# asp.net sql data-binding

使用 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/

相关文章:

mysql - 类型的最后 x 个事件的 SQL

c# - 跨多个数据库的交叉引用

c# - 正确停止异步 TCP 应用程序

c# - 在 C# 中使用变量等待和线程安全

c# - 如何为Windows窗体应用程序设置发布者名称

c# - 任务并行库和外部 SQL Server

javascript - 最后点击的单选按钮 ID

asp.net - 在标题卡住后保持 Gridview 标题与列的大小相同

asp.net - 为什么 IIS 比 ASP.NET 开发服务器慢?

c# - 从 SQLDataReader 读取结果时出现无效的转换异常