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.

521 lines
20 KiB

Imports C1.Win.C1TrueDBGrid
Imports System
Imports System.Data
Imports System.Data.SqlTypes
Imports System.Data.SqlClient
Imports DevComponents.AdvTree
Imports DevComponents
Namespace TKB.VV.Lifecycle
Public Class clslifeCycle
Public Enum SelectionType
nur_eingesetzt = 1
nur_nicht_eingesetzt = 2
alle = 3
End Enum
Public Enum SingleMultiSelectionType
SingleSelection = 1
MultiSelection = 2
End Enum
Public IMGLIST As ImageList
Sub New()
Produkttypen = Stammdaten.Get_Stammdaten("LC_Produkttyp", "Bezeichnung")
Produkttypen_Copy = Produkttypen.Copy
Produkttypen_Copy.Rows.Clear()
Dim dr As DataRow
dr = Produkttypen_Copy.NewRow
dr.Item(0) = -1
dr.Item(1) = "Alle"
Produkttypen_Copy.Rows.Add(dr)
For Each r As DataRow In Produkttypen.Rows
dr = Produkttypen_Copy.NewRow
dr.Item(0) = r("lc_produkttypnr")
dr.Item(1) = r("Bezeichnung")
Produkttypen_Copy.Rows.Add(dr)
Next
Produkttypen_Copy1 = Produkttypen_Copy.Copy
End Sub
#Region "Deklarationen"
Private Stammdaten As New TKB.VV.Stammdaten.clsStammdaten
Dim treedata As New DataSet
Public Produkttypen As New DataTable
Public Produkttypen_Copy As New DataTable
Public Produkttypen_Copy1 As New DataTable
Public Produkte As New DataTable
#End Region
#Region "Struktur"
Public Sub Load_Treestrukutr(ByRef tree As AdvTree, ByVal selectiontype As SelectionType, Optional OnlyStructure As Boolean = False, Optional SelBox As Boolean = False, Optional SelTyp As Integer = 0)
tree.Nodes.Clear()
Get_Produkte(OnlyStructure, selectiontype)
LoadTree(treedata, tree, SelBox, SelTyp)
End Sub
Public Function IstStruktur(ByVal Tag As Integer) As Boolean
For Each r As DataRow In treedata.Tables(0).Rows
Try
If r("id") = Tag And r("IstStruktur") = True Then
Return True
End If
Catch
End Try
Next
Return False
End Function
Public Function IstCopy(ByVal Tag As Integer) As Boolean
For Each r As DataRow In treedata.Tables(0).Rows
Try
If r("id") = Tag And r("copy") = 1 Then
Return True
End If
Catch
End Try
Next
Return False
End Function
Public Function Get_Originalid(ByVal Tag As Integer) As Integer
For Each r As DataRow In treedata.Tables(0).Rows
Try
If r("id") = Tag Then
Return r("Originalid")
End If
Catch
End Try
Next
Return 0
End Function
Public Function Get_Produkte(OnLyProdukte As Boolean, ByVal Selectiontype As SelectionType) As DataTable
treedata.Tables.Clear()
treedata_for_search.Rows.Clear()
Dim selectcommand As New SqlCommand
Dim connection As New SqlConnection()
Dim da As New SqlDataAdapter("", connection)
If OnLyProdukte Then
selectcommand.CommandText = "sp_lc_get_Struktur"
Else
selectcommand.CommandText = "[sp_lc_get_Struktur_Auswahl]"
selectcommand.Parameters.Add("SelectionType", SqlDbType.Int, 4)
selectcommand.Parameters(0).Value = Selectiontype
End If
selectcommand.CommandType = CommandType.StoredProcedure
selectcommand.Connection = connection
Try
connection.ConnectionString = Globals.sConnectionString
connection.Open()
da.SelectCommand = selectcommand
da.Fill(treedata, "Tree")
If treedata_for_search.Rows.Count < 1 Then
For Each c As DataColumn In treedata.Tables(0).Columns
If c.ColumnName = "ErweiterteSuche" Then
Dim dc As New DataColumn
dc.ColumnName = "ErweiterteSuche"
dc.DataType = System.Type.GetType("System.String")
dc.DefaultValue = " "
Try
treedata_for_search.Columns.Add(dc)
Catch
End Try
Else
Try
treedata_for_search.Columns.Add(c.ColumnName)
Catch
End Try
End If
Next
End If
For Each row As DataRow In treedata.Tables(0).Rows
treedata_for_search.ImportRow(row)
Next
Catch ex As Exception
MsgBox(ex.Message)
Finally
connection.Close()
da.Dispose()
selectcommand.Dispose()
End Try
End Function
Public Function Get_Produktliste() As DataTable
Produkte.Rows.Clear()
Dim selectcommand As New SqlCommand
Dim connection As New SqlConnection()
Dim da As New SqlDataAdapter("", connection)
selectcommand.CommandText = "sp_lc_get_produkte"
selectcommand.CommandType = CommandType.StoredProcedure
selectcommand.Connection = connection
Try
connection.ConnectionString = Globals.sConnectionString
connection.Open()
da.SelectCommand = selectcommand
da.Fill(Produkte)
Catch ex As Exception
Finally
connection.Close()
da.Dispose()
selectcommand.Dispose()
End Try
End Function
#End Region
#Region "Tree"
Private Sub LoadTree(ByVal treedata As DataSet, ByRef tree As AdvTree, ByVal SelBox As Boolean, ByVal SelType As Integer)
If Not (treedata Is Nothing) Then
Dim oView As DataView = treedata.Tables(0).DefaultView
Dim oTable As DataTable = oView.Table
Dim oDS As DataSet = New DataSet()
oDS.Tables.Add(oTable.Copy())
If oDS.Relations.Contains("SelfRefenceRelation") = False Then
oDS.Relations.Add("SelfRefenceRelation", _
oDS.Tables(0).Columns("id"), _
oDS.Tables(0).Columns("Parentid"))
End If
oTable.Dispose()
oTable = Nothing
LoadTreeView(oDS, tree, SelBox, SelType)
oDS.Dispose()
oDS = Nothing
End If
End Sub
Private Sub LoadTreeView(ByVal oDS As DataSet, ByRef oTreeview As AdvTree, ByVal SelBox As Boolean, ByVal SelType As Integer)
'Dim oTreeView As TreeView = New TreeView()
Dim oDataRow As DataRow
For Each oDataRow In oDS.Tables(0).Rows
If Not oDataRow.IsNull("Parentid") Then
If oDataRow.Item("Parentid") = 0 Then
'If oDataRow.IsNull("Parentid") Then
Dim oNode As New DevComponents.AdvTree.Node
oNode.Text = Trim(oDataRow("Bezeichnung").ToString())
Try
'oNode.ToolTipText = Trim(oDataRow("ErweiterteSuche").ToString)
Catch
End Try
oNode.Tag = oDataRow("id").ToString
oNode.ImageIndex = oDataRow("ImageIndex")
oNode.ImageIndex = oDataRow("ImageIndex")
'oNode.TagString = oDataRow("beschreibung").ToString
If oDataRow("Copy") = 1 Then
'Dim cell As New DevComponents.AdvTree.Cell
'oNode.Cells.Add(cell)
'cell.Images.Image = Me.IMGLIST.Images(0)
oNode.Style = oTreeview.Styles(2)
End If
If SelBox = True Then
If oDataRow.Item("IstStruktur") = False Then
oNode.CheckBoxVisible = True
If SelType = 1 Then oNode.CheckBoxStyle = DotNetBar.eCheckBoxStyle.RadioButton
End If
End If
oTreeview.Nodes.Add(oNode)
RecursivelyLoadTree(oDataRow, oNode, oTreeview, SelBox, SelType)
End If
End If
Next oDataRow
oDS.Dispose()
oDS = Nothing
End Sub
Private Sub RecursivelyLoadTree(ByVal oDataRow As DataRow, ByRef oNode As DevComponents.AdvTree.Node, ByRef oTreeview As AdvTree, ByVal SelBox As Boolean, ByVal SelType As Integer)
Dim oChildRow As DataRow
For Each oChildRow In oDataRow.GetChildRows("SelfRefenceRelation")
Dim oChildNode As New DevComponents.AdvTree.Node
oChildNode.Text = Trim(oChildRow("Bezeichnung").ToString())
oChildNode.Tag = oChildRow("id").ToString()
oChildNode.ImageIndex = oChildRow("ImageIndex")
'oChildNode.TagString = oChildRow("Beschreibung").ToString
If oChildRow("Copy") = 1 Then
'Dim cell As New DevComponents.AdvTree.Cell
'oChildNode.Cells.Add(cell)
'cell.Images.Image = Me.IMGLIST.Images(0)
oChildNode.Style = oTreeview.Styles(2)
End If
If SelBox = True Then
If oChildRow.Item("IstStruktur") = False Then
oChildNode.CheckBoxVisible = True
If SelType = 1 Then oChildNode.CheckBoxStyle = DotNetBar.eCheckBoxStyle.RadioButton
End If
End If
oNode.Nodes.Add(oChildNode)
RecursivelyLoadTree(oChildRow, oChildNode, oTreeview, SelBox, SelType)
Next oChildRow
End Sub
Public Function FindNode(ByVal _nodeCollection As DevComponents.AdvTree.NodeCollection, ByVal SearchVal As Integer, ByVal SearchString As String) As DevComponents.AdvTree.Node
Dim tmpNode As DevComponents.AdvTree.Node
For Each _child As DevComponents.AdvTree.Node In _nodeCollection
If _child.Tag = SearchVal Then
Return _child
End If
'If InStr(UCase(_child.Text), UCase(SearchString)) > 0 Then
' Return _child
' End If
tmpNode = FindNode(_child.Nodes, SearchVal, SearchString)
If Not tmpNode Is Nothing Then
Return tmpNode
End If
Next
Return Nothing
End Function
Public Function FindNode_string(ByVal _nodeCollection As DevComponents.AdvTree.NodeCollection, ByVal SearchVal As Integer, ByVal SearchString As String) As DevComponents.AdvTree.Node
Dim tmpNode As DevComponents.AdvTree.Node
For Each _child As DevComponents.AdvTree.Node In _nodeCollection
'If _child.Tag = SearchVal Then
'
' Return _child
' End If
If UCase(_child.Text) = UCase(SearchString) Then
Return _child
End If
tmpNode = FindNode_string(_child.Nodes, SearchVal, SearchString)
If Not tmpNode Is Nothing Then
Return tmpNode
End If
Next
Return Nothing
End Function
Dim foundnode As Integer = 0
Dim searchstring As String = ""
Public Treesearch As New DevComponents.AdvTree.AdvTree
Dim treedata_for_search As New DataTable
Public Function Init_Search()
FoundNode = 0
Searchstring = ""
Me.Treesearch.Nodes.Clear()
End Function
Public Function SearchNode(ByRef tree As DevComponents.AdvTree.AdvTree, ByVal SearchString As String) As DevComponents.AdvTree.Node
'Return tree.FindNodeByCellText(SearchString)
Me.Treesearch.Nodes.Clear()
For Each dr As DataRow In treedata_for_search.Rows
'InStr(UCase(SearchString), UCase(dr.Item("Bezeichnung")))
If InStr(UCase(dr.Item("Bezeichnung")), UCase(SearchString)) > 0 Or InStr(UCase(dr.Item("Beschreibung")), UCase(SearchString)) > 0 Then
Dim tn As New DevComponents.AdvTree.Node
tn.Text = dr.Item("Bezeichnung")
tn.Tag = dr.Item("id")
Treesearch.Nodes.Add(tn)
End If
Next
Return FindFirst(tree)
End Function
Public Function FindFirst(ByRef Tree As DevComponents.AdvTree.AdvTree) As DevComponents.AdvTree.Node
Try
If Me.Treesearch.Nodes.Count > 0 Then Me.Treesearch.SelectedNode = Me.Treesearch.Nodes(0)
Return FindNode(Tree.Nodes, Treesearch.SelectedNode.Tag, "")
Catch
End Try
End Function
Public Function FindNextNode(ByRef tree As DevComponents.AdvTree.AdvTree) As DevComponents.AdvTree.Node
Try
Treesearch.SelectedNode = Treesearch.SelectedNode.NextNode
If Treesearch.SelectedNode Is Nothing Then
Return FindFirst(tree)
End If
Return Me.FindNode(tree.Nodes, Treesearch.SelectedNode.Tag, "")
Catch ex As Exception
End Try
End Function
Public Function FindPrevNode(ByRef tree As DevComponents.AdvTree.AdvTree) As DevComponents.AdvTree.Node
Try
Treesearch.SelectedNode = Treesearch.SelectedNode.PrevNode
If Treesearch.SelectedNode Is Nothing Then
Return FindLastNode(tree)
End If
Return Me.FindNode(tree.Nodes, Treesearch.SelectedNode.Tag, "")
Catch ex As Exception
End Try
End Function
Public Function FindLastNode(ByRef tree As DevComponents.AdvTree.AdvTree) As DevComponents.AdvTree.Node
Try
Treesearch.SelectedNode = Treesearch.Nodes(Treesearch.Nodes.Count - 1)
Return Me.FindNode(tree.Nodes, Treesearch.SelectedNode.Tag, "")
Catch ex As Exception
End Try
End Function
Public Function Update_Treesearch(ByVal Tag As Integer, ByVal ptag As Integer, ByVal Bezeichnung As String, ByVal Beschreibung As String)
Exit Function
For Each r As DataRow In treedata_for_search.Rows
If r.Item(0) = Tag Then
r.Item(1) = 1 = ptag
r.Item(2) = Bezeichnung
r.Item(4) = Beschreibung
End If
Next
End Function
Dim Allnodes As List(Of String) = New List(Of String)
Dim subnodes As List(Of String) = New List(Of String)
Public Function Init_search(ByRef treeview As DevComponents.AdvTree.AdvTree)
Me.treedata_for_search.Clear()
Me.treedata_for_search.Columns.Clear()
Me.treedata_for_search.Columns.Add("key")
Me.treedata_for_search.Columns.Add("Bez")
Allnodes.Clear()
subnodes.Clear()
Dim i As Integer
For Each n As DevComponents.AdvTree.Node In treeview.Nodes
subnodes = GetChildren(n)
For i = 0 To subnodes.Count - 1
Allnodes.Add(subnodes(i))
Next
Dim r As DataRow = treedata_for_search.NewRow
r.Item(0) = n.Tag.ToString
r.Item(1) = n.Text
treedata_for_search.Rows.Add(r)
Allnodes.Add(n.Tag + n.Text)
Next
End Function
Function GetChildren(parentNode As DevComponents.AdvTree.Node) As List(Of String)
Dim nodes As List(Of String) = New List(Of String)
GetAllChildren(parentNode, nodes)
Return nodes
End Function
Sub GetAllChildren(parentNode As DevComponents.AdvTree.Node, nodes As List(Of String))
For Each childNode As DevComponents.AdvTree.Node In parentNode.Nodes
nodes.Add(childNode.Tag.ToString + childNode.Text)
Dim r As DataRow = treedata_for_search.NewRow
r.Item(0) = childNode.Tag.ToString
r.Item(1) = childNode.Text
treedata_for_search.Rows.Add(r)
GetAllChildren(childNode, nodes)
Next
End Sub
Public Sub Search_First(ByRef tree As DevComponents.AdvTree.AdvTree, ByVal key As Integer, searchtext As String)
For Each r As DataRow In Me.treedata_for_search.Rows
If UCase(r(1).ToString).IndexOf((UCase(searchtext))) > -1 Then
tree.SelectedNode = Me.FindNode(tree.Nodes, r(0), r(0))
Exit Sub
End If
Next
End Sub
Public Sub Search_Last(ByRef tree As DevComponents.AdvTree.AdvTree, ByVal key As Integer, searchtext As String)
Dim found As Integer = -1
For Each r As DataRow In Me.treedata_for_search.Rows
If UCase(r(1).ToString).IndexOf((UCase(searchtext))) > -1 Then
found = r(0)
End If
Next
If found <> -1 Then
tree.SelectedNode = Me.FindNode(tree.Nodes, found, found)
End If
End Sub
Public Sub Search_next(ByRef tree As DevComponents.AdvTree.AdvTree, ByVal key As Integer, searchtext As String)
Dim found As Boolean = False
For Each r As DataRow In Me.treedata_for_search.Rows
If r(0) = key Then
found = True
End If
If found And r(0) <> key Then
If UCase(r(1).ToString).IndexOf((UCase(searchtext))) > -1 Then
tree.SelectedNode = Me.FindNode(tree.Nodes, r(0), r(0))
Exit Sub
End If
End If
Next
If found <> -1 Then
tree.SelectedNode = Me.FindNode(tree.Nodes, found, found)
End If
End Sub
Public Sub Search_prev(ByRef tree As DevComponents.AdvTree.AdvTree, ByVal key As Integer, searchtext As String)
Dim found As Integer = 1
For Each r As DataRow In Me.treedata_for_search.Rows
If UCase(r(1).ToString).IndexOf((UCase(searchtext))) > -1 And r(0) <> key Then
found = r(0)
End If
If r(0) = key Then
tree.SelectedNode = FindNode(tree.Nodes, found, found)
Exit Sub
End If
Next
End Sub
Public Sub Clear_Search()
Try
Me.treedata_for_search.Clear()
Catch
End Try
End Sub
#End Region
Public Function TreeView_GetRootNode(objTV As DevComponents.AdvTree.AdvTree, node As DevComponents.AdvTree.Node) As DevComponents.AdvTree.Node
Try
If node.Parent Is Nothing Then
Return Nothing
Else
Dim parent As DevComponents.AdvTree.Node = node.Parent
While Not parent.Parent Is Nothing
parent = parent.Parent
End While
Return parent
End If
Catch
End Try
End Function
End Class
End Namespace