Public Class frmNacherfassungVorkosten
    Public VORKOSTEN As List(Of VERAG_PROG_ALLGEMEIN.cVorkosten)
    Public FilialenNr As Integer = -1
    Public AbfertigungsNr As Integer = -1
    Public UnterNr As Integer = -1


    Dim FUNC As New cProgramFunctions

    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
        Try


            'For i = 0 To dgvVorkosten.RowCount - 1
            '    Dim r As DataGridViewRow = dgvVorkosten.Rows(i)
            '    If CStr(r.Cells("LeistungsNr").Value) = "" Or CStr(r.Cells("Leistungsbez").Value) = "" Or CStr(r.Cells("Preis").Value) = "" Or Not IsNumeric(r.Cells("Preis").Value) Then
            '        lblError.Show()
            '        Me.DialogResult = Windows.Forms.DialogResult.None
            '        Exit Sub
            '    End If
            'Next

            VORKOSTEN.Clear()
            Dim LeistungsBez As String = ""
            For i = 0 To dgvVorkosten.RowCount - 1
                Dim r As DataGridViewRow = dgvVorkosten.Rows(i)
                If Not IsNumeric(r.Cells("LeistungsNr").Value) Then MsgBox("Leistungsnummer muss eine Zahl sein!") : Me.DialogResult = Windows.Forms.DialogResult.None : Exit Sub
                If Not IsNumeric(r.Cells("Preis").Value) Then MsgBox("Preis muss eine Zahl sein!") : Me.DialogResult = Windows.Forms.DialogResult.None : Exit Sub
                If r.Cells("LeistungsBez").Value.ToString.Length > 256 Then MsgBox("Leistungbezeichnung zu lang (max 256 Zeichen)!") : Me.DialogResult = Windows.Forms.DialogResult.None : Exit Sub
                If CStr(r.Cells("Leistungsbez").Value).ToString.Length > 30 Then
                    LeistungsBez = CStr(r.Cells("Leistungsbez").Value).ToString.Substring(0, 30)
                Else
                    LeistungsBez = CStr(r.Cells("Leistungsbez").Value)
                End If
                VORKOSTEN.Add(New VERAG_PROG_ALLGEMEIN.cVorkosten(FilialenNr, AbfertigungsNr, UnterNr, CInt(r.Cells("LeistungsNr").Value), LeistungsBez, CDbl(r.Cells("Preis").Value), CStr(r.Cells("Leistungsbez").Value)))
            Next
            Me.Close()

        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
            Me.DialogResult = Windows.Forms.DialogResult.None
        End Try
    End Sub

    Private Sub frmNacherfassungVorkosten_Load(sender As Object, e As EventArgs) Handles Me.Load

        cboLeistungs.fillWithSQL(" SELECT [LeistungsNr], LeistungsBez FROM [Leistungen] ORDER BY [LeistungsNr] ", True, "FMZOLL", True)

        dgvVorkosten.Rows.Clear()
        If VORKOSTEN IsNot Nothing Then
            For Each VK In VORKOSTEN
                dgvVorkosten.Rows.Add(VK.LeistungsNr, VK.LeistungsBez, VK.Preis)
            Next
        End If
        dgvVorkosten.ClearSelection()
    End Sub

    Private Sub dgvVorkosten_DataError(sender As Object, anError As DataGridViewDataErrorEventArgs) Handles dgvVorkosten.DataError

        MessageBox.Show("Error happened " & anError.Context.ToString())

        If anError.Context = DataGridViewDataErrorContexts.Commit Then
            MessageBox.Show("Commit error")
        End If

        If anError.Context = DataGridViewDataErrorContexts.CurrentCellChange Then
            MessageBox.Show("Cell change")
        End If

        If anError.Context = DataGridViewDataErrorContexts.Parsing Then
            MessageBox.Show("parsing error")
        End If

        If anError.Context = DataGridViewDataErrorContexts.LeaveControl Then
            MessageBox.Show("leave control error")
        End If

        If TypeOf (anError.Exception) Is ConstraintException Then
            Dim view As DataGridView = CType(sender, DataGridView)
            view.Rows(anError.RowIndex).ErrorText = "an error"
            view.Rows(anError.RowIndex).Cells(anError.ColumnIndex).ErrorText = "an error"
            anError.ThrowException = False
        End If

    End Sub


    Private Sub frmNacherfassungVorkosten_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        cboLeistungs.Focus()
        'Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        'With DirectCast(dgvVorkosten.Columns("LeistungsNr"), DataGridViewComboBoxColumn)

        '    .DataSource = SQL.loadDgvBySql(" SELECT [LeistungsNr], CAST(LeistungsNr as varchar(3)) + ' - ' + [LeistungsBez] as LeistungsBez FROM [Leistungen] ORDER BY [LeistungsNr] ", "FMZOLL")
        '    ' .DataSource = SQL.loadDgvBySql(" SELECT [LeistungsNr],  [LeistungsBez] as LeistungsBez FROM [Leistungen] ORDER BY [LeistungsNr] ", "FMZOLL")

        '    .ValueMember = "LeistungsNr" '.DataSource.Columns(0).ColumnName
        '    .DisplayMember = "LeistungsBez" '.DataSource.Columns(1).ColumnName
        '    .DataPropertyName = "LeistungsNr"
        '    .DropDownWidth = 350
        'End With

    End Sub

    Private Sub btn_Click(sender As Object, e As EventArgs)
        For Each v In VORKOSTEN
            'Dim rowId = dgvVorkosten.Rows.Add()

            'dgvVorkosten.Rows(rowId).Cells("LeistungsNr").Value = v.LeistungsNr
            'dgvVorkosten.Rows(rowId).Cells("LeistungsBez").Value = v.LeistungsBez
            'dgvVorkosten.Rows(rowId).Cells("Preis").Value = v.Preis

            'MsgBox(v.LeistungsNr & "-" & v.LeistungsBez & "-" & v.Preis)
            dgvVorkosten.Rows.Add(v.LeistungsNr, v.LeistungsBez, v.Preis)
        Next
        dgvVorkosten.Columns("Preis").DefaultCellStyle.Format = "C2"

    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        addVorkosten()
    End Sub


    Dim VK_EDIT = -1
    Sub addVorkosten()
        Label23.Visible = False
        Label24.Visible = False
        If cboLeistungs._value = "" Then Label23.Visible = True : cboLeistungs.Focus() : Exit Sub
        If txtLeistungsbezeichnung.Text = "" Then Label24.Visible = True : txtLeistungsbezeichnung.Focus() : Exit Sub
        If txtPreis._value = "" Then Label1.Visible = True : txtPreis.Focus() : Exit Sub

        If txtLeistungsbezeichnung.Text.Length > 265 Then MsgBox("Leistungbezeichnung zu lang (max 265 Zeichen)!") : Label24.Visible = True : txtLeistungsbezeichnung.Focus() : Exit Sub

        If VK_EDIT >= 0 Then
            dgvVorkosten.Rows.RemoveAt(VK_EDIT)
            dgvVorkosten.Rows.Insert(VK_EDIT, cboLeistungs._value, txtLeistungsbezeichnung.Text, txtPreis._value)
            VK_EDIT = -1
            Button3.BackgroundImage = My.Resources.plus
            lklBearbeitungAbbrechenPK.Visible = False
        Else
            dgvVorkosten.Rows.Add(cboLeistungs._value, txtLeistungsbezeichnung.Text, txtPreis._value)
        End If
        cboLeistungs.changeItem("") : txtLeistungsbezeichnung.Text = "" : txtPreis.Text = ""
        dgvVorkosten.FirstDisplayedScrollingRowIndex = dgvVorkosten.RowCount - 1
        dgvVorkosten.ClearSelection()
        cboLeistungs.Focus()
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If dgvVorkosten.SelectedRows.Count > 0 Then
            If MsgBox("Möchten Sie den Eintrag in 'Vorkosten' wirklich löschen?", vbYesNoCancel) = vbYes Then
                dgvVorkosten.Rows.Remove(dgvVorkosten.SelectedRows(0))
            End If
        End If
        dgvVorkosten.ClearSelection()
    End Sub

    Private Sub lklBearbeitungAbbrechenPK_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lklBearbeitungAbbrechenPK.LinkClicked
        VK_EDIT = -1
        cboLeistungs.changeItem("")
        txtLeistungsbezeichnung.Text = ""
        txtPreis.Text = ""

        Button3.BackgroundImage = My.Resources.plus
        lklBearbeitungAbbrechenPK.Visible = False
    End Sub


    Private Sub dgvPackstuecke_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvVorkosten.CellDoubleClick
        If e.RowIndex < 0 Then Exit Sub
        editableRowPK(e.RowIndex)
    End Sub

    Private Sub PackstueckeKeyDown(sender As Object, e As KeyEventArgs) Handles txtLeistungsbezeichnung.KeyDown, txtPreis.KeyDown
        If e.KeyCode = Keys.Return Then addVorkosten()
        e.Handled = True
    End Sub

    Sub editableRowPK(index As Integer)
        cboLeistungs.changeItem(dgvVorkosten.Rows(index).Cells("LeistungsNr").Value)
        txtLeistungsbezeichnung.Text = dgvVorkosten.Rows(index).Cells("LeistungsBez").Value
        txtPreis._value = dgvVorkosten.Rows(index).Cells("Preis").Value
        VK_EDIT = index
        Button3.BackgroundImage = My.Resources.stift
        lklBearbeitungAbbrechenPK.Visible = True
    End Sub
    Private Sub dgvPackstuecke_CellContentClick(sender As Object, e As EventArgs) Handles dgvVorkosten.LostFocus
        '    dgvVorkosten.ClearSelection()
    End Sub

End Class