//Rows will only be shown if parent is expanded (grand-parents must be expanded too)
    protected void rows_OnItemDataBound(object sender, ListViewItemEventArgs e)
    {
        ListViewDataItem dataItem = e.Item as ListViewDataItem;

        if (dataItem == null)
        {
            return;                   //safe check
        }
        int rowindex = dataItem.DataItemIndex;

        AreaOverview.AOWasteTreeListRow        row  = dataItem.DataItem as AreaOverview.AOWasteTreeListRow;
        List <AreaOverview.AOWasteTreeListRow> data = ViewState[RESULT] as List <AreaOverview.AOWasteTreeListRow>;

        //Sectors need not to be considered. Will always be visible
        bool collapsed = false;

        if (row.Level > 0)
        {
            //is sector collapsed?
            collapsed = !data.Single(d => d.SectorCode == row.SectorCode && d.Level == 0).IsExpanded;

            if (row.Level > 1 && !collapsed)
            {
                //is activity collapsed?
                collapsed = !data.Single(d => d.ActivityCode == row.ActivityCode && d.Level == 1).IsExpanded;
            }
        }

        dataItem.Visible = !collapsed;
    }
    private void toggleExpanded(int rowindex)
    {
        List <AreaOverview.AOWasteTreeListRow> data = ViewState[RESULT] as List <AreaOverview.AOWasteTreeListRow>;

        AreaOverview.AOWasteTreeListRow row = data[rowindex];

        //toggle expansion
        row.IsExpanded = !row.IsExpanded;

        //get data from database, if not already loaded
        if (row.HasChildren && row.IsExpanded && !data.Any(r => r.Level == row.Level + 1 && r.ParentCode == row.Code))
        {
            if (row.Level == 0)
            {
                var activities = AreaOverview.GetWasteTransferActivities(SearchFilter, new List <string> {
                    row.SectorCode
                });
                addToResult(activities);
            }
            else if (row.Level == 1)
            {
                var subactivities = AreaOverview.GetWasteTransferSubActivities(SearchFilter, new List <string> {
                    row.ActivityCode
                });
                addToResult(subactivities);
            }
        }

        this.lvWasteTransferActivity.DataSource = data;
        this.lvWasteTransferActivity.DataBind();


        // notify that content has changed (print)
        if (ContentChanged != null)
        {
            ContentChanged.Invoke(null, EventArgs.Empty);
        }
    }
 protected string GetNONHWQuantity(object obj)
 {
     AreaOverview.AOWasteTreeListRow row = (AreaOverview.AOWasteTreeListRow)obj;
     return(QuantityFormat.Format(row.GetQuantity(AreaOverview.CODE_NONHW), row.GetUnit(AreaOverview.CODE_NONHW)));
 }
 protected string GetNONHWFacilities(object obj)
 {
     AreaOverview.AOWasteTreeListRow row = (AreaOverview.AOWasteTreeListRow)obj;
     return(NumberFormat.Format(row.GetFacilities(AreaOverview.CODE_NONHW)));
 }