public void LoadQuery(StoredQuery query) { listView.Columns.Clear(); using (var progress = new MonoDevelop.Ide.ProgressMonitoring.MessageDialogProgressMonitor(true, false, false)) { var fields = CachedMetaData.Instance.Fields; WorkItemStore store = new WorkItemStore(query); var data = store.LoadByPage(progress); if (data.Count > 0) { var firstItem = data[0]; List <IDataField> dataFields = new List <IDataField>(); var mapping = new Dictionary <Field, IDataField <object> >(); foreach (var item in firstItem.WorkItemInfo.Keys) { var field = fields[item]; var dataField = new DataField <object>(); dataFields.Add(dataField); mapping.Add(field, dataField); } if (dataFields.Any()) { if (ShowCheckboxes) { isCheckedField = new DataField <bool>(); dataFields.Insert(0, isCheckedField); var checkColumn = new CheckBoxCellView(isCheckedField) { Editable = true }; checkColumn.Toggled += (sender, e) => { var astore = (TreeStore)listView.DataSource; var node = astore.GetNavigatorAt(listView.CurrentEventRow); var workItem = node.GetValue(workItemField); if (!node.GetValue(isCheckedField)) { if (OnSelectWorkItem != null) { OnSelectWorkItem(workItem); } } else { if (OnRemoveWorkItem != null) { OnRemoveWorkItem(workItem); } } }; listView.Columns.Add("", checkColumn); } workItemField = new DataField <WorkItem>(); dataFields.Insert(0, workItemField); var listStore = new TreeStore(dataFields.ToArray()); foreach (var map in mapping) { listView.Columns.Add(map.Key.Name, map.Value); } listView.DataSource = listStore; foreach (var workItem in data) { var row = listStore.AddNode(); row.SetValue(workItemField, workItem); foreach (var map in mapping) { object value; if (workItem.WorkItemInfo.TryGetValue(map.Key.ReferenceName, out value)) { row.SetValue(map.Value, value); } else { row.SetValue(map.Value, null); } } } } } } }