using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OnDoc.Klassen; using Syncfusion.Windows.Forms.Tools.MultiColumnTreeView; using System.Reflection; using System.Xml.Linq; using System.Drawing.Imaging; using Database; using OnDoc.UIControls; namespace OnDoc.UICintrols { public partial class PartnerTree : UserControl { public delegate void StrukturHandler(object myObject, StrukturArgs myArgs); public event StrukturHandler OnStrukturClicked; public class treeclass { public int dokumentartnr { get; set; } public string bezeichnung { get; set; } public int imageindex { get; set; } public int imageindexopen { get; set; } public int parentid { get; set; } public int sort { get; set; } } private int partnernr; public int PartnerNr { get => partnernr; set { partnernr = value; Update_Tree(); } } public int mitarbeiternr { get; set; } public int profilnr {get;set;} public PartnerTree() { InitializeComponent(); this.ImageList3.Images.Clear(); for (int i = 0; i < 75; i++) { string iname = @"X:\Imagelist\Relaunche\" + i.ToString() + ".png"; if (System.IO.File.Exists(iname)) { ImageList3.Images.Add(Image.FromFile(iname)); } else { iname = @"X:\Imagelist\Relaunche\1.png"; ImageList3.Images.Add(Image.FromFile(iname)); } } } public void Refresh(int partnernr, int mitarbeiternr, int profilnr) { this.partnernr = partnernr; this.mitarbeiternr = mitarbeiternr; this.profilnr = profilnr; Update_Tree(); } private bool Update_Tree(TreeNode root = null) { try { treeView1.BeginUpdate(); Cursor = Cursors.WaitCursor; if (root == null) { this.treeView1.Nodes.Clear(); } if (this.partnernr == 0) return false; DataTable treedata = new DataTable(); DataTable partnerdata = new DataTable(); DataTable rootdata = new DataTable(); DB db = new DB(AppParams.connectionstring); rootdata = db.Get_Partnerstruktur(PartnerNr, true, mitarbeiternr, profilnr); TreeNode partnernode = new TreeNode(); TreeNode foundnode = new TreeNode(); foreach (DataRow dr in rootdata.Rows) { foundnode = SearchTreeView(dr["Person"].ToString(), treeView1.Nodes); if (foundnode == null) { foundnode = new TreeNode(); foundnode.Text = dr["Person"].ToString(); foundnode.Tag = dr["person_nrpar00"].ToString(); foundnode.ImageIndex = Convert.ToInt32(dr["person_imageindex"].ToString()); foundnode.SelectedImageIndex = Convert.ToInt32(dr["person_imageindexopen"].ToString()); Font boldFont = new Font(treeView1.Font, FontStyle.Bold); foundnode.NodeFont = boldFont; treeView1.Nodes.Add(foundnode); if (rootdata.Rows.Count > 59000) { foundnode.Nodes.Add(new TreeNode("Dummy")); } else { partnerdata = db.Get_Partnerstruktur(Convert.ToInt32(dr["Person_nrpar00"].ToString()), false, mitarbeiternr, profilnr); foreach (DataRow drp in partnerdata.Rows) { if (Convert.ToInt32(drp["parentid"].ToString()) == 2) { drp["parentid"] = dr["person_nrpar00"].ToString(); }; if (Convert.ToInt32(drp["parentid"].ToString()) < 2) { drp.Delete(); }; } partnerdata.AcceptChanges(); List list1 = treedata.AsEnumerable().ToList(); List tree1 = new List(); tree1 = ConvertDataTable(partnerdata); PopulateTree(ref foundnode, tree1); } } partnernode = new TreeNode(); partnernode.Text = dr["Partner"].ToString(); partnernode.Tag = dr["nrpar00"].ToString(); partnernode.ImageIndex = Convert.ToInt32(dr["imageindex"].ToString()); partnernode.SelectedImageIndex = Convert.ToInt32(dr["imageindexopen"].ToString()); Font boldFont1 = new Font(treeView1.Font, FontStyle.Bold); partnernode.NodeFont = boldFont1; foundnode.Nodes.Add(partnernode); if (rootdata.Rows.Count > 50) { partnernode.Nodes.Add(new TreeNode("Dummy")); } else { treedata = db.Get_Partnerstruktur(Convert.ToInt32(dr["nrpar00"].ToString()), false, mitarbeiternr, profilnr); foreach (DataRow drp in treedata.Rows) { if (Convert.ToInt32(drp["parentid"].ToString()) == 2) { drp["parentid"] = dr["nrpar00"].ToString(); }; if (Convert.ToInt32(drp["parentid"].ToString()) < 2) { drp.Delete(); }; } treedata.AcceptChanges(); List list = treedata.AsEnumerable().ToList(); List tree = new List(); tree = ConvertDataTable(treedata); PopulateTree(ref partnernode, tree); } } try { if (rootdata.Rows.Count == 1) { if (ignore != true) { treeView1.ExpandAll(); } } treeView1.SelectedNode = treeView1.Nodes[0]; treeView1.SelectedNode.EnsureVisible(); } catch { } treeView1.EndUpdate(); Cursor = Cursors.Default; return true; } catch { treeView1.EndUpdate(); Cursor = Cursors.Default; return false; } } private TreeNode SearchTreeView(string p_sSearchTerm, TreeNodeCollection p_Nodes) { foreach (TreeNode node in p_Nodes) { if (node.Text == p_sSearchTerm) return node; if (node.Nodes.Count > 0) { TreeNode child = SearchTreeView(p_sSearchTerm, node.Nodes); if (child != null) return child; } } return null; } public void PopulateTree(ref TreeNode root, List eintraege) { if (root == null) { root = new TreeNode(); root.Text = ""; root.Tag = null; // get all departments in the list with parent is null var details = eintraege.Where(t => t.parentid == null); foreach (var detail in details) { var child = new TreeNode() { Text = detail.bezeichnung, Tag = detail.dokumentartnr.ToString(), ImageIndex = detail.imageindex, SelectedImageIndex = detail.imageindex, }; PopulateTree(ref child, eintraege); root.Nodes.Add(child); } } else { //var id = (int)root.Tag; int id = Convert.ToInt32(root.Tag.ToString()); var details = eintraege.Where(t => t.parentid == id); foreach (var detail in details) { var child = new TreeNode() { Text = detail.bezeichnung, Tag = detail.dokumentartnr, ImageIndex = detail.imageindex, SelectedImageIndex = detail.imageindex, }; PopulateTree(ref child, eintraege); root.Nodes.Add(child); } } } private static List ConvertDataTable(DataTable dt) { List data = new List(); foreach (DataRow row in dt.Rows) { T item = GetItem(row); data.Add(item); } return data; } private static T GetItem(DataRow dr) { Type temp = typeof(T); T obj = Activator.CreateInstance(); foreach (DataColumn column in dr.Table.Columns) { foreach (PropertyInfo pro in temp.GetProperties()) { if (pro.Name == column.ColumnName) pro.SetValue(obj, dr[column.ColumnName], null); else continue; } } return obj; } private void tsbtnPartnerSearch_Click(object sender, EventArgs e) { try { this.PartnerNr = Convert.ToInt32(this.txtPartnerNr.Text); } catch { this.txtPartnerNr.Text = ""; } } private void txtPartnerNr_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { tsbtnPartnerSearch_Click(sender, e); } } bool ignore = false; private void treeView1_AfterExpand(object sender, TreeViewEventArgs e) { if (ignore) return; if (e.Node.Nodes.Count < 2) { partnernr = Convert.ToInt32(e.Node.Tag); //e.Node.Nodes.Clear(); ignore=true; Update_Tree(e.Node); e.Node.ExpandAll(); ignore = false; } } private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (this.tschkShowImgID.Checked) { MessageBox.Show(e.Node.ImageIndex.ToString()); } int Pnr = 0; if (e.Node.Level<2) { Pnr = Convert.ToInt32(e.Node.Tag); } else { Pnr = ReadRecursive(e.Node); } StrukturArgs myArgs = new StrukturArgs("",Convert.ToInt32(e.Node.Tag.ToString()),Pnr); OnStrukturClicked(this, myArgs); } private int ReadRecursive(TreeNode node) { TreeNode tmpnode = node; while ( tmpnode.Level>1) { tmpnode = tmpnode.Parent; } if (tmpnode.Text.ToString().IndexOf(" - ") < 3) { while (tmpnode.Level > 0) { tmpnode = tmpnode.Parent; } } return Convert.ToInt32(tmpnode.Tag); } private void toolStripButton2_Click(object sender, EventArgs e) { } private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } private void toolStripLabel1_Click(object sender, EventArgs e) { } private void tsbtnPartnerSuche_Click(object sender, EventArgs e) { Partnersuche partnersuche = new Partnersuche(); partnersuche.ShowDialog(); if (partnersuche.DialogResult == DialogResult.OK) { if (partnersuche.partnernr != 0) { this.partnernr = partnersuche.partnernr; Update_Tree(); } } } } }