You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
378 lines
13 KiB
378 lines
13 KiB
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<DataRow> list1 = treedata.AsEnumerable().ToList();
|
|
List<treeclass> tree1 = new List<treeclass>();
|
|
tree1 = ConvertDataTable<treeclass>(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<DataRow> list = treedata.AsEnumerable().ToList();
|
|
List<treeclass> tree = new List<treeclass>();
|
|
tree = ConvertDataTable<treeclass>(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<treeclass> 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<T> ConvertDataTable<T>(DataTable dt)
|
|
{
|
|
List<T> data = new List<T>();
|
|
foreach (DataRow row in dt.Rows)
|
|
{
|
|
T item = GetItem<T>(row);
|
|
data.Add(item);
|
|
}
|
|
return data;
|
|
}
|
|
private static T GetItem<T>(DataRow dr)
|
|
{
|
|
Type temp = typeof(T);
|
|
T obj = Activator.CreateInstance<T>();
|
|
|
|
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(); }
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|