Head-Filter für Besuchsberichte eingebaut

This commit is contained in:
2022-09-21 14:45:16 +02:00
parent 82e4914c35
commit e262e48e5b
2 changed files with 230 additions and 20 deletions

View File

@@ -23,25 +23,34 @@ Partial Class usrCntlBesuchsberichte
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Me.pnlFilter = New System.Windows.Forms.Panel()
Me.dgvFILTER = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.Label1 = New System.Windows.Forms.Label()
Me.Panel1 = New System.Windows.Forms.Panel()
Me.btnNew = New System.Windows.Forms.Button()
Me.btnDelete = New System.Windows.Forms.Button()
Me.dgvBesuchsberichte = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.lblEinträge = New System.Windows.Forms.Label()
CType(Me.dgvFILTER, System.ComponentModel.ISupportInitialize).BeginInit()
Me.Panel1.SuspendLayout()
CType(Me.dgvBesuchsberichte, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'pnlFilter
'dgvFILTER
'
Me.pnlFilter.BackColor = System.Drawing.Color.White
Me.pnlFilter.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
Me.pnlFilter.Dock = System.Windows.Forms.DockStyle.Bottom
Me.pnlFilter.Location = New System.Drawing.Point(0, 43)
Me.pnlFilter.Name = "pnlFilter"
Me.pnlFilter.Size = New System.Drawing.Size(1072, 34)
Me.pnlFilter.TabIndex = 11
Me.dgvFILTER.AKTUALISIERUNGS_INTERVALL = -1
Me.dgvFILTER.AllowUserToAddRows = False
Me.dgvFILTER.AllowUserToDeleteRows = False
Me.dgvFILTER.AllowUserToResizeColumns = False
Me.dgvFILTER.AllowUserToResizeRows = False
Me.dgvFILTER.BackgroundColor = System.Drawing.Color.White
Me.dgvFILTER.BorderStyle = System.Windows.Forms.BorderStyle.None
Me.dgvFILTER.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgvFILTER.ColumnHeadersVisible = False
Me.dgvFILTER.Location = New System.Drawing.Point(0, 45)
Me.dgvFILTER.Name = "dgvFILTER"
Me.dgvFILTER.ScrollBars = System.Windows.Forms.ScrollBars.None
Me.dgvFILTER.Size = New System.Drawing.Size(1072, 34)
Me.dgvFILTER.TabIndex = 16
'
'Label1
'
@@ -57,14 +66,15 @@ Partial Class usrCntlBesuchsberichte
'Panel1
'
Me.Panel1.BackColor = System.Drawing.Color.FromArgb(CType(CType(240, Byte), Integer), CType(CType(245, Byte), Integer), CType(CType(255, Byte), Integer))
Me.Panel1.Controls.Add(Me.lblEinträge)
Me.Panel1.Controls.Add(Me.dgvFILTER)
Me.Panel1.Controls.Add(Me.btnNew)
Me.Panel1.Controls.Add(Me.Label1)
Me.Panel1.Controls.Add(Me.btnDelete)
Me.Panel1.Controls.Add(Me.pnlFilter)
Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top
Me.Panel1.Location = New System.Drawing.Point(0, 0)
Me.Panel1.Name = "Panel1"
Me.Panel1.Size = New System.Drawing.Size(1072, 77)
Me.Panel1.Size = New System.Drawing.Size(1072, 79)
Me.Panel1.TabIndex = 13
'
'btnNew
@@ -108,13 +118,23 @@ Partial Class usrCntlBesuchsberichte
Me.dgvBesuchsberichte.AllowUserToResizeRows = False
Me.dgvBesuchsberichte.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.dgvBesuchsberichte.Dock = System.Windows.Forms.DockStyle.Fill
Me.dgvBesuchsberichte.Location = New System.Drawing.Point(0, 77)
Me.dgvBesuchsberichte.Location = New System.Drawing.Point(0, 79)
Me.dgvBesuchsberichte.Name = "dgvBesuchsberichte"
Me.dgvBesuchsberichte.ReadOnly = True
Me.dgvBesuchsberichte.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
Me.dgvBesuchsberichte.Size = New System.Drawing.Size(1072, 530)
Me.dgvBesuchsberichte.Size = New System.Drawing.Size(1072, 528)
Me.dgvBesuchsberichte.TabIndex = 15
'
'lblEinträge
'
Me.lblEinträge.AutoSize = True
Me.lblEinträge.BackColor = System.Drawing.Color.White
Me.lblEinträge.Location = New System.Drawing.Point(817, 29)
Me.lblEinträge.Name = "lblEinträge"
Me.lblEinträge.Size = New System.Drawing.Size(58, 13)
Me.lblEinträge.TabIndex = 41
Me.lblEinträge.Text = "0 Einträge "
'
'usrCntlBesuchsberichte
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -123,16 +143,18 @@ Partial Class usrCntlBesuchsberichte
Me.Controls.Add(Me.Panel1)
Me.Name = "usrCntlBesuchsberichte"
Me.Size = New System.Drawing.Size(1072, 607)
CType(Me.dgvFILTER, System.ComponentModel.ISupportInitialize).EndInit()
Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout()
CType(Me.dgvBesuchsberichte, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents pnlFilter As System.Windows.Forms.Panel
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Panel1 As System.Windows.Forms.Panel
Friend WithEvents dgvBesuchsberichte As VERAG_PROG_ALLGEMEIN.MyDatagridview
Friend WithEvents btnNew As Button
Friend WithEvents btnDelete As Button
Friend WithEvents dgvFILTER As VERAG_PROG_ALLGEMEIN.MyDatagridview
Friend WithEvents Panel1 As Panel
Friend WithEvents lblEinträge As Label
End Class

View File

@@ -4,20 +4,37 @@ Public Class usrCntlBesuchsberichte
Public kdnr As Integer = -1
Dim SQL As New SQL
Dim dgvInitWait As Boolean = False
Public kdNr_filter As Boolean = False
Dim txtchanged As Boolean = False
Dim fullyPainted = False
Private Sub usrCntlBesuchsberichte_Load(sender As Object, e As EventArgs) Handles Me.Load
initDGV()
End Sub
Sub initDGV()
Sub initDGV(Optional doFilter = False)
Dim SQLCmd = "SELECT TOP (200) [bb_Id],[bb_DatumBesuch],[bb_KundenNr],[bb_Kunde] ,[bb_Anpsprechpartner] ,[bb_Vermerk],[bb_Sachbearbeiter] FROM [VERAG].[dbo].[tblBesuchsberichte] WHERE bb_Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' " & If(kdnr > 0, " AND bb_KundenNr='" & kdnr & "'", "")
If doFilter Then
newBinding(SQLCmd, doFilter)
Else
initFilter()
With dgvBesuchsberichte
.SET_SQL(SQLCmd, "FMZOLL")
.LOAD()
End With
End If
With dgvBesuchsberichte
.SET_SQL("SELECT TOP (1000) [bb_Id],[bb_DatumBesuch],[bb_KundenNr],[bb_Kunde] ,[bb_Anpsprechpartner] ,[bb_Vermerk],[bb_Sachbearbeiter] FROM [VERAG].[dbo].[tblBesuchsberichte] WHERE bb_Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' " & If(kdnr > 0, " AND bb_KundenNr='" & kdnr & "'", ""), "FMZOLL")
.LOAD()
If .Columns.Count > 0 Then
.Columns("bb_DatumBesuch").Width = 150
.Columns("bb_DatumBesuch").HeaderText = "Datum"
@@ -45,6 +62,8 @@ Public Class usrCntlBesuchsberichte
btnDelete.Enabled = False
lblEinträge.Text = dgvBesuchsberichte.RowCount & " Einträge"
End Sub
Private Sub dgvBesuchsberichteDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvBesuchsberichte.CellDoubleClick
@@ -80,4 +99,173 @@ Public Class usrCntlBesuchsberichte
End If
End Sub
Private Sub dgvBesuchsberichte_SelectionChanged(sender As Object, e As EventArgs) Handles dgvBesuchsberichte.SelectionChanged
End Sub
Private Sub dgvFILTER_SelectionChanged(sender As Object, e As EventArgs) Handles dgvFILTER.SelectionChanged
dgvFILTER.ClearSelection()
End Sub
Private Sub dgvFILTER_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvFILTER.CellContentClick
If dgvFILTER.Columns(e.ColumnIndex).GetType Is GetType(DataGridViewCheckBoxColumn) Then
dgvBesuchsberichte.Focus()
End If
End Sub
Private Sub dgvFILTER_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvFILTER.CellValueChanged
initDGV(True)
End Sub
Sub initFilter()
dgvInitWait = True
dgvFILTER.RowTemplate.Height = dgvFILTER.Height
If Not Me.fullyPainted Then Exit Sub ' nur wenn die usrcntl komplett gelden wurde...
Try
dgvFILTER.Columns.Clear()
Catch ex As Exception
End Try
For Each c As DataGridViewColumn In dgvBesuchsberichte.Columns
Dim cNew As DataGridViewColumn = c.Clone
'MsgBox("Create Filter Column " & cNew.HeaderText)
cNew.MinimumWidth = c.Width
dgvFILTER.Columns.Add(cNew)
If cNew.GetType Is GetType(DataGridViewCheckBoxColumn) Then
DirectCast(cNew, DataGridViewCheckBoxColumn).ThreeState = True
DirectCast(cNew, DataGridViewCheckBoxColumn).DefaultCellStyle.NullValue = CheckState.Indeterminate
End If
Next
If dgvFILTER IsNot Nothing AndAlso dgvFILTER.ColumnCount > 0 Then
dgvFILTER.Rows.Add()
dgvFILTER.Width = dgvBesuchsberichte.Width
End If
dgvInitWait = False
End Sub
Function getSqlText(t) As String
Try
Return t.Replace("'", "")
Catch ex As Exception
Return ""
End Try
End Function
Function getFilter() As String
Dim filter As String = ""
Dim andstr As String = ""
If dgvFILTER.RowCount > 0 Then
'MsgBox("Filter aktiviert")
For Each c As DataGridViewCell In dgvFILTER.Rows(0).Cells
If c.Value IsNot DBNull.Value Then
If c.GetType Is GetType(DataGridViewTextBoxCell) Then
If c.Value IsNot Nothing AndAlso c.Value <> "" Then
'Noch prüfen, was hier genau gemacht wird!!!!
Dim srchstr = getSqlText(c.Value.ToString.Trim)
If c.OwningColumn.Name.Contains("SDLNr") Then
filter &= andstr & " SDL.[" & c.OwningColumn.Name & "] LIKE '%" & srchstr & "%' "
ElseIf c.OwningColumn.Name.Contains("IDS-KdNr") Then
filter &= andstr & " (SELECT TOP 1 [CustomerCode] FROM [VERAG].[dbo].[tbl_IDS_Kunden] WHERE [KdNrVERAG]=KundenNr AND KdNrAlt =0 ORDER BY Zeitstempel DESC) LIKE '%" & srchstr & "%' "
ElseIf IsDate(srchstr) Then
If srchstr.ToLower = "ist null" Then
filter &= andstr & "( [" & c.OwningColumn.Name & "] is null ) "
Else
filter &= andstr & " convert(varchar,[" & c.OwningColumn.Name & "] ,104) LIKE '%" & srchstr & "%' "
End If
Else
If srchstr.ToLower = "ist null" Then
filter &= andstr & "( [" & c.OwningColumn.Name & "] LIKE '' OR [" & c.OwningColumn.Name & "] is null ) "
Else
filter &= andstr & " [" & c.OwningColumn.Name & "] LIKE '%" & srchstr & "%' "
End If
End If
andstr = " AND "
'bis hier
End If
ElseIf c.GetType Is GetType(DataGridViewCheckBoxCell) Then
If c.Value IsNot Nothing AndAlso c.Value.ToString <> "" Then
If c.Value = CheckState.Checked Then
filter &= andstr & " SDL.[" & c.OwningColumn.Name & "] =1 "
andstr = " AND "
ElseIf c.Value = CheckState.Unchecked Then
filter &= andstr & " SDL.[" & c.OwningColumn.Name & "] =0 "
andstr = " AND "
End If
End If
End If
End If
Next
End If
Return filter
End Function
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If m.Msg = 15 AndAlso Not fullyPainted Then
fullyPainted = True
initDGV()
initFilter()
End If
End Sub
Sub newBinding(ByVal sql As String, doFilter As Boolean)
dgvInitWait = True
' bindingSDL = Nothing
dgvBesuchsberichte.Columns.Clear()
dgvBesuchsberichte.VirtualMode = True
txtchanged = True
dgvInitWait = True
If doFilter Then
Dim filter As String = getFilter()
If filter <> "" Then sql &= " AND " & filter
' sql &= " ORDER BY sdl.[Erfassungsdatum] ASC"
Else
' clearFilter()
End If
If kdNr_filter And kdnr > 0 Then sql &= " AND KundenNr=" & kdnr
'Sortierung der tabl-DS
'sql &= " ORDER BY sdl.[Bestelldatum] , sdl.[Erfassungsdatum] ASC ,sdl.ts"
'dgvBesuchsberichte.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
' dgvSDL.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing '; //or even better .DisableResizing. Most time consumption enum is DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
'dgvBesuchsberichte.SET_SQL(sql, "SDL", , {"KundenNr", "KfzKennzeichen", "SDLNr", "History"})
dgvBesuchsberichte.SET_SQL(sql, "FMZOLL")
dgvBesuchsberichte.LOAD()
dgvInitWait = False
txtchanged = False
dgvInitWait = False
dgvBesuchsberichte.ClearSelection()
If dgvBesuchsberichte.RowCount > 0 Then dgvBesuchsberichte.Rows(0).Cells(0).Selected = True
dgvBesuchsberichte_SelectionChanged(Me, New EventArgs)
End Sub
End Class