private void toggleExpanded(int rowindex) { List <PollutantReleases.AreaTreeListRow> data = ViewState[RESULT] as List <PollutantReleases.AreaTreeListRow>; PollutantReleases.AreaTreeListRow 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 subareas = PollutantReleases.GetSubAreas(SearchFilter, new List <string> { row.CountryCode }); addToResult(subareas); } } this.lvPollutantReleasesArea.DataSource = data; this.lvPollutantReleasesArea.DataBind(); // notify that content has changed (print) if (ContentChanged != null) { ContentChanged.Invoke(null, EventArgs.Empty); } }
//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; PollutantReleases.AreaTreeListRow row = dataItem.DataItem as PollutantReleases.AreaTreeListRow; List <PollutantReleases.AreaTreeListRow> data = ViewState[RESULT] as List <PollutantReleases.AreaTreeListRow>; //Countries need not to be considered. Will always be visible bool collapsed = false; if (row.Level > 0) { //is country collapsed? collapsed = !data.Single(d => d.CountryCode == row.CountryCode && d.Level == 0).IsExpanded; } dataItem.Visible = !collapsed; }