From e262e48e5b48a1bcd2721029c711c3e074c0d06d Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Wed, 21 Sep 2022 14:45:16 +0200 Subject: [PATCH] =?UTF-8?q?Head-Filter=20f=C3=BCr=20Besuchsberichte=20eing?= =?UTF-8?q?ebaut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usrCntlBesuchsberichte.Designer.vb | 52 +++-- .../Besuchsberichte/usrCntlBesuchsberichte.vb | 198 +++++++++++++++++- 2 files changed, 230 insertions(+), 20 deletions(-) diff --git a/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.Designer.vb b/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.Designer.vb index 6b61c160..864c3f7a 100644 --- a/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.Designer.vb +++ b/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.Designer.vb @@ -23,25 +23,34 @@ Partial Class usrCntlBesuchsberichte 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 diff --git a/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.vb b/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.vb index 898bdbc2..280055a6 100644 --- a/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.vb +++ b/SDL/mdm/Besuchsberichte/usrCntlBesuchsberichte.vb @@ -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