public void InitJobs(IEnumerable <BatchJob> jobs, IPropertyEditableObjectEditor editor, Action <BatchJob> scheduleJob) { _editor = editor; _scheduleJob = scheduleJob; var groups = jobs.GroupBy(p => p.Group, q => q, (group, code) => group).ToList(); foreach (string group in groups) { TreeNode groupNode = new TreeNode(group); groupNode.Tag = new ListViewItem(new string[] { "", group }); var groupJobs = jobs.Where(p => p.Group == group).OrderBy(p => p.Name).ToList(); foreach (var groupJob in groupJobs) { TreeNode node = new TreeNode(groupJob.Name); var task = new TasklistViewItem(groupJob); task.Tag = node; //use to give a reference for updating the treenode node.Tag = task; groupNode.Nodes.Add(node); } this.TreeView.Nodes.Add(groupNode); } }
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { e.DrawDefault = true; Rectangle rect = e.Bounds; if ((e.State & TreeNodeStates.Selected) != 0) { if ((e.State & TreeNodeStates.Focused) != 0) { e.Graphics.FillRectangle(SystemBrushes.Highlight, rect); } else { e.Graphics.FillRectangle(SystemBrushes.Control, rect); } } else { e.Graphics.FillRectangle(Brushes.White, rect); } e.Graphics.DrawRectangle(SystemPens.Control, rect); for (int intColumn = 1; intColumn < this.listView1.Columns.Count; intColumn++) { rect.Offset(this.listView1.Columns[intColumn - 1].Width, 0); rect.Width = this.listView1.Columns[intColumn].Width; e.Graphics.DrawRectangle(SystemPens.Control, rect); string strColumnText; ListViewItem list = e.Node.Tag as ListViewItem; TasklistViewItem tasklist = list as TasklistViewItem; if (list.SubItems.Count > 2) { strColumnText = list.SubItems[intColumn + 1].Text; } else if (intColumn < 2 && list.SubItems.Count <= 2) { strColumnText = list.SubItems[intColumn].Text; } else { strColumnText = string.Empty;// intColumn + " " + e.Node.Text; // dummy } TextFormatFlags flags = TextFormatFlags.EndEllipsis | TextFormatFlags.Left; //switch(this.listView1.Columns[intColumn].TextAlign) //{ // case HorizontalAlignment.Center: // flags |= TextFormatFlags.HorizontalCenter; // break; // case HorizontalAlignment.Left: // flags |= TextFormatFlags.Left; // break; // case HorizontalAlignment.Right: // flags |= TextFormatFlags.Right; // break; // default: // break; //} if (intColumn == 3 && tasklist != null) { ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rect); int width = (int)((double)tasklist.CurrentOp / (double)tasklist.TotalOps * (double)rect.Size.Width); Rectangle prect = new Rectangle(rect.Location, new Size(width, rect.Size.Height)); ProgressBarRenderer.DrawHorizontalChunks(e.Graphics, prect); } else { rect.Y++; if ((e.State & TreeNodeStates.Selected) != 0 && (e.State & TreeNodeStates.Focused) != 0) { TextRenderer.DrawText(e.Graphics, strColumnText, e.Node.NodeFont, rect, SystemColors.HighlightText, flags); } else { TextRenderer.DrawText(e.Graphics, strColumnText, e.Node.NodeFont, rect, e.Node.ForeColor, e.Node.BackColor, flags); } rect.Y--; } } }