ASP.NET Core MVC Controls | ComponentOne
Working with Controls / FlexGrid / Work with FlexGrid / Detail Row
In This Topic
    Detail Row
    In This Topic

    FlexGrid provides support for detail row functionality, which adds a templated, expandable row to the control. You can add details section to any row in FlexGrid, which enables you to group data in a template that will be visible optionally. This allows end users to view additional data related to a row by simply selecting the row.

    Built-in expand/collapse buttons are also provided to control the visibility of data within the expandable row. You can add nested grid within a Detail Row to create a hierarchical grid interface.

    The following image shows how a FlexGrid with Detail Row appears. The example uses Customer data from local NorthWind database file C1NWind.mdf.


    The following code examples demonstrate how to enable Detail Row in a FlexGrid:

    DetailRowController.cs

    C#
    Copy Code
    public partial class FlexGridController : Controller
    {
        public ActionResult DetailRow()
        {
            var customers = db.Customers.Take(10).ToList();
            var model = customers.Select(c => new CustomerWithOrders
            {
                CustomerID = c.CustomerID,
                CompanyName = c.CompanyName,
                Country = c.Country,
                City = c.City,
                Orders = (db.Orders.Where(o => o.CustomerID == c.CustomerID).ToList())
            });
            return View(model);
        }
    }
    

    DetailRow.cshtml

    HTML
    Copy Code
    @model IEnumerable<CustomerWithOrders>
    
    <script type="text/javascript">
        function hasDetail(row) {
            return row.dataItem.Country.length > 5;
        }
    </script>
    
    <c1-flex-grid id="detailRowFlexGrid" auto-generate-columns="false" is-read-only="true">
        <c1-flex-grid-column binding="CustomerID" width="*"></c1-flex-grid-column>
        <c1-flex-grid-column binding="CompanyName" width="2*"></c1-flex-grid-column>
        <c1-flex-grid-column binding="Country" width="2*"></c1-flex-grid-column>
        <c1-flex-grid-column binding="City" width="2*"></c1-flex-grid-column>
        <c1-flex-grid-detail detail-visibility-mode="DetailVisibilityMode.ExpandSingle" row-has-detail="hasDetail">
            <c1-flex-grid auto-generate-columns="false" is-read-only="true" height="200px" template-bindings="@(new {ItemsSource="Orders"})">
                    <c1-flex-grid-column binding="ShippedDate" width="*"></c1-flex-grid-column>
                    <c1-flex-grid-column binding="Freight" width="*"></c1-flex-grid-column>
                    <c1-flex-grid-column binding="ShipVia" width="*"></c1-flex-grid-column>
                </c1-flex-grid>
        </c1-flex-grid-detail>
        <c1-items-source source-collection="Model"></c1-items-source>
    </c1-flex-grid>
    

    Note that public class CustomerWithOrders inherits Customer class, and can be defined in the model named CustomerWithOrders, as shown below:

    Example Title
    Copy Code
    public class CustomerWithOrders : Customer
    {
        public List<Order> Orders { get; set; }
    }
    
    See Also