Question

I want to implement an apperance as this article mentioned using nested ListView control. However, in my scenario, I cannot use EntityDataSource control so I bind data manually.

My table:

Categories
  PK: UniqueId, Guid
  Name, string
  ParentId, Guid

<asp:ListView ID="CategoryList" runat="server" 
        onitemdatabound="CategoryList_ItemDataBound">
        <LayoutTemplate>
            <table>
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server"></asp:PlaceHolder>
            </table>
        </LayoutTemplate>

        <ItemTemplate>
            <tr>
                <td colspan="2"><%# Eval("Name") %></td>
            </tr>
        </ItemTemplate>
    </asp:ListView>



protected void Page_Load(object sender, EventArgs e)
{
    using (PractiseEntities context = new PractiseEntities()) {
        var result = from categories in context.Categories
                     select categories;
        CategoryList.DataSource = result;
        CategoryList.DataBind();
    }
}

I want the sub category have an indent by add a <td> tag to the item which "ParentId" is not null. And my question is how to edit the generated html tags in the ItemDataBound event?

Was it helpful?

Solution

You could have something like this:

<ItemTemplate>
    <tr>
        <td colspan="2"><%# GetParentContent(Eval("ParentID")) %></td>
    </tr>
</ItemTemplate>

in the code-behind:

protected string GetParentContent(object ParentID)
{
    if(ParentID!=null)
        ... return parent HTML ...
    else
        return "";
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top