All pastes #1314 Raw Edit

Anonymous

public text v1 · immutable
#1314 ·published 2004-10-07 14:17 UTC
rendered paste body
 Public Function DataTableInnerJoin(ByVal Relation As DataRelation, Optional ByVal DataTableName As String = "", Optional ByVal SensitiveValuesOnly As Boolean = True) As DataTable
        Dim JoinedDataTable As New DataTable
        Dim ThisColumn, NewColumn As DataColumn
        Dim ThisRow, NewRow As DataRow
        Dim idx As Integer
        Dim ThisCell
        Dim CellsGroup As New Hashtable
        Dim ColumnName As String
        If DataTableName = "" Then
            JoinedDataTable.TableName = Relation.RelationName + "table"
        Else
            JoinedDataTable.TableName = DataTableName
        End If

        For Each ThisColumn In Relation.ChildTable.Columns
            If SensitiveValuesOnly Then
                If Not Me.isContainedInArray(ThisColumn, Relation.ChildColumns) Then
                    NewColumn = Me.DataColumnCopy(ThisColumn, Relation.RelationName + ThisColumn.Table.TableName + ThisColumn.ColumnName)
                    JoinedDataTable.Columns.Add(NewColumn)
                End If
            Else
                NewColumn = Me.DataColumnCopy(ThisColumn, Relation.RelationName + ThisColumn.Table.TableName + ThisColumn.ColumnName)
                JoinedDataTable.Columns.Add(NewColumn)
            End If
        Next
        For Each ThisColumn In Relation.ParentTable.Columns
            If SensitiveValuesOnly Then
                If Not Me.isContainedInArray(ThisColumn, Relation.ParentColumns) Then
                    NewColumn = Me.DataColumnCopy(ThisColumn, Relation.RelationName + ThisColumn.Table.TableName + ThisColumn.ColumnName)
                    JoinedDataTable.Columns.Add(NewColumn)
                End If
            Else
                NewColumn = Me.DataColumnCopy(ThisColumn, Relation.RelationName + ThisColumn.Table.TableName + ThisColumn.ColumnName)
                JoinedDataTable.Columns.Add(NewColumn)
            End If
        Next
        NewRow = JoinedDataTable.NewRow()
        For Each ThisRow In Relation.ChildTable.Rows
            CellsGroup.Clear()
            NewRow = JoinedDataTable.NewRow()
            For idx = 0 To ThisRow.ItemArray.GetUpperBound(0)
                ColumnName = Relation.RelationName + Relation.ChildTable.TableName + Relation.ChildTable.Columns(idx).ColumnName
                If JoinedDataTable.Columns.Contains(ColumnName) Then
                    CellsGroup.Add(ColumnName, ThisRow.Item(idx))
                    NewRow(ColumnName) = ThisRow.Item(idx)
                End If
            Next
            JoinedDataTable.Rows.Add(NewRow)
        Next
        Dim PrimaryKeyColumns(Relation.ChildTable.PrimaryKey.Length) As DataColumn
        idx = 0
        For Each ThisColumn In Relation.ChildTable.PrimaryKey
            PrimaryKeyColumns(idx) = JoinedDataTable.Columns.Item(Relation.RelationName + Relation.ChildTable.TableName + ThisColumn.ColumnName)
            idx = idx + 1
        Next
        JoinedDataTable.PrimaryKey = PrimaryKeyColumns
        Dim externalkeys() As Object
        Dim Externalvalues As DataRow
        Dim SearchPoint As Int16 = Relation.RelationName.Length
        Dim EndSearch As Int16 = Relation.ChildTable.TableName.Length
        Dim PrimaryKeyValues(Relation.ChildTable.PrimaryKey.Length - 1), ForeignKeyValues(Relation.ParentTable.PrimaryKey.Length - 1)
        For Each ThisRow In JoinedDataTable.Rows
            idx = 0
            For Each ThisColumn In JoinedDataTable.PrimaryKey
                PrimaryKeyValues(idx) = ThisRow.Item(ThisColumn)
                idx = idx + 1
            Next
            Externalvalues = Relation.ChildTable.Rows.Find(PrimaryKeyValues)
            For idx = 0 To Relation.ChildColumns.GetUpperBound(0)
                ForeignKeyValues(idx) = Externalvalues.Item(Relation.ChildColumns(idx))
            Next
            Externalvalues = Relation.ParentTable.Rows.Find(ForeignKeyValues)
            For Each ThisColumn In Relation.ParentTable.Columns
                ColumnName = Relation.RelationName + Relation.ParentTable.TableName + ThisColumn.ColumnName
                MessageBox.Show("preif")
                If JoinedDataTable.Columns.Contains(ColumnName) Then
                    MessageBox.Show("ifgone")
                    ThisRow(ColumnName) = Externalvalues.Item(ThisColumn)
                End If
            Next
        Next
        Return JoinedDataTable
    End Function