Code Snippet
using
System;
using
System.Threading;
using
System.Windows.Forms;
using
System.Data;
namespace
Vesku.BusinessRules.Asiakkaat
{
/// <summary>
/// Summary description for AsiakasRyhmaNodes.
/// </summary>
[Serializable()]
public class AsiakasRyhmaNodes
{
private static Mutex mtx = new Mutex();
private static AsiakasRyhmaNodes instance;
private System.Windows.Forms.TreeNode pRootNode;
private DatasetAsiakasryhmat ds;
protected AsiakasRyhmaNodes()
{
//
// TODO: Add constructor logic here
//
HaeData();
}
public void Remove(TreeNode n)
{
mtx.WaitOne();
TreeNode node = EtsiRyhmä(((Asiakasryhmä)n.Tag).Id,
null);
node.Parent.Nodes.Remove(node);
mtx.ReleaseMutex();
}
public static AsiakasRyhmaNodes Instance()
{
mtx.WaitOne();
if(instance == null)
{
instance =
new AsiakasRyhmaNodes();
}
mtx.ReleaseMutex();
return instance;
}
public void ForceReload()
{
mtx.WaitOne();
instance =
new AsiakasRyhmaNodes();
mtx.ReleaseMutex();
}
public void HaeData()
{
Asiakasryhmienkäsittely ark =
null;
try
{
ark =
new Asiakasryhmienkäsittely();
ds =
new DatasetAsiakasryhmat();
ds.Merge(ark.HaeKaikkiAsiakasryhmat()); // Getting data from DB
pRootNode =
new TreeNode("Asiakasryhmät");
CreateNodesOfParent(0, pRootNode);
}
catch(Exception ex)
{
throw new Exception("Virhe Asiakasryhmien muodostuksessa!", ex);
}
finally
{
if(ark != null)
ark.Dispose();
if(ds != null)
ds.Dispose();
}
}
public TreeNode RootNode()
{
mtx.WaitOne();
return (TreeNode)pRootNode.Clone();
mtx.ReleaseMutex();
}
public TreeNode EtsiRyhmä(NullableTypes.NullableInt32 id, TreeNode node)
{
if(id.IsNull)
return null;
System.Collections.ArrayList ar =
new System.Collections.ArrayList();
TreeNode ret =
null;
if(node==null)
ar.InsertRange(0, pRootNode.Nodes);
else
ar.InsertRange(0, node.Nodes);
foreach(TreeNode n in ar)
{
if((n.Tag!=null) &&(((Asiakasryhmä)n.Tag).Id.Value==id.Value))
{
ret = n;
break;
}
if(n.Tag!=null)
{
ret = EtsiRyhmä(id,n);
if(ret!=null)
break;
}
if((n.Tag==null)&&(n.Nodes.Count>1))
{
ret = EtsiRyhmä(id,n);
if(ret!=null)
break;
}
}
return ret;
}
public void LisääRyhmä(Asiakasryhmä a)
{
mtx.WaitOne();
TreeNode node =
new TreeNode();
node.Text = a.Nimi;
if(a.Sopimus!=null)
node.Text = node.Text + " ("+ a.Sopimus.Nimi+")";
node.Tag = a;
TreeNode newParent = EtsiRyhmä(a.YlempiAsiakasryhmäId,
null);
if(newParent == null)
newParent = pRootNode;
newParent.Nodes.Add(node);
mtx.ReleaseMutex();
}
public void PaivitaRyhma(Asiakasryhmä a)
{
mtx.WaitOne();
TreeNode node = EtsiRyhmä(a.Id,
null);
node.Parent.Nodes.Remove(node);
node.Text = a.Nimi;
if(a.Sopimus!=null)
node.Text = node.Text + " ("+ a.Sopimus.Nimi+")";
node.Tag = a;
TreeNode newParent = EtsiRyhmä(a.YlempiAsiakasryhmäId,
null);
if(newParent == null)
newParent = pRootNode;
newParent.Nodes.Add(node);
mtx.ReleaseMutex();
}
public void CreateNodesOfParent(int iParent,TreeNode pNode)
{
Asiakasryhmienkäsittely ark =
null;
try
{
DataView dv =
new DataView(ds.AsiakasRyhmat);
ark =
new Asiakasryhmienkäsittely();
if(iParent != 0)
{
dv.RowFilter = "[aryYlempi_AsiakasryhmaID] = " + iParent;
}
else
{
dv.RowFilter = "[aryYlempi_AsiakasryhmaID] " + "is null";
}
dv.Sort = "aryNimi";
foreach(DataRowView Row in dv)
{
Asiakasryhmä a = ark.MuodostaAsiakasRyhmä(Row);
TreeNode node =
new TreeNode();
node.Text = a.Nimi;
if(a.Sopimus!=null)
node.Text = node.Text + " ("+ a.Sopimus.Nimi+")";
node.Tag = a;
if(pNode == null)
{
pRootNode.Nodes.Add(node);
}
else
{
pNode.Nodes.Add(node);
}
CreateNodesOfParent(
int.Parse(Row["aryAsiakasryhmaID"].ToString()),node);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if(ark != null)
ark.Dispose();
// if(ds != null)
// ds.Dispose();
}
}
}
}