//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; WasteTransfers.ActivityTreeListRow row = dataItem.DataItem as WasteTransfers.ActivityTreeListRow; List <WasteTransfers.ActivityTreeListRow> data = ViewState[RESULT] as List <WasteTransfers.ActivityTreeListRow>; //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 <WasteTransfers.ActivityTreeListRow> data = ViewState[RESULT] as List <WasteTransfers.ActivityTreeListRow>; WasteTransfers.ActivityTreeListRow 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 = WasteTransfers.GetActivities(SearchFilter, new List <string> { row.SectorCode }); addToResult(activities); } else if (row.Level == 1) { var subactivities = WasteTransfers.GetSubActivities(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); } }