Hallo Zusammen,
ich habe in einem Dataset eine DataTable "tbl_invoice", wo Rechnungsinformationen wie Rg.-Nr., Datum, Betrag, bezahlt, bezahlt wann, etc. gespeichert werden.
Die Daten sind in einer MariaDB gespeichert bw. werden dort zur Verfügung gestellt.
Dem Anwender wird für die bereits erstellten Rechnungen ein Form mit einem Datagridview (dgv_invoice_overview) bereit gestellt, wo ihm jede "noch nicht bezahlte Rechnung" angezeigt wird. Für das "noch nicht bezahlt" habe ich in der Datenbank eine Column "tbl_invoice_paid" (Typ: tinyint(1)) - 0 oder 1.
Im DGV wird diese Column als DataGridViewCheckBoxColumn dargestellt.
Das Filtern der DataTable "tbl_invoice" habe ich
Versuch a) Mit einer BindingSource (über den Designer aufs Form gepackt und gefüllt)
Versuch b) Mit einer DataView realisiert
Angenommen, der Anwender hat nun in der DGV fünf "offene" - noch nicht bezahlte Rechnungen vor sich...
Wenn er nun in Row 2 (oder 0, 1, 3, 4) die Checkbox der Column "tbl_invoice_paid" klickt und diese damit auf "True" setzt, er jetzt die Row 2 verlässt (wenn er in der Row bleibt, bleibt auch die Row), schlägt der Filter zu und die Row ist aus dem DGV - also nicht mehr sichtbar.
Das möchte ich aber nicht! Die Row 2 soll angezeigt werden, bis der Anwender mit einem Button ALLE Änderungen akzeptiert (da liegt mein Problem nicht).
Wenn ich für das DGV noch weitere (außer Checkboxes) Filter erstelle, kann ich in dem DGV alle sonstige DataGridViewTextBoxColumn ändern, ohne das die Row verschwindet, wenn ich eine andere Row anwähle.
Im o. g. Filter kann ich z.B. im DGV das Datum in der Column "tbl_invoice_should_pay" außerhalb des Filters ändern und die Row bleibt im DGV, wenn ich den Focus der Row ändere
Grundsätzlich klappt die Definition des Filters auch mit
bzw.
Eine Google-Recherche hatte mir u. a. ein Ergebnis gebracht, worauf ich mir die Doku durchgelesen hatte, aber nichts fand (was evtl. an dem vorm Bildschirm lag): vbforums.com/showthread.php?65…18&viewfull=1#post4038718
Ich denke, dass es an der DataGridViewCheckBoxColumn und dessen Verhalten beim Verlassen der aktuellen Row liegt, habe aber keinen Plan, wie ich das realisieren soll
Ich würde mich sehr über Hilfe bei meinem Problem freuen.
Viele Grüße,
Laret
P.S. Natürlich könnte ich die Source (DataTable) mit SQL vorfiltern. Ich möchte das aber wenn es geht vermeiden, da ich die Table nunmal bereits geladen habe (für neue Rechnungen, Statistik, etc).
ich habe in einem Dataset eine DataTable "tbl_invoice", wo Rechnungsinformationen wie Rg.-Nr., Datum, Betrag, bezahlt, bezahlt wann, etc. gespeichert werden.
Die Daten sind in einer MariaDB gespeichert bw. werden dort zur Verfügung gestellt.
Dem Anwender wird für die bereits erstellten Rechnungen ein Form mit einem Datagridview (dgv_invoice_overview) bereit gestellt, wo ihm jede "noch nicht bezahlte Rechnung" angezeigt wird. Für das "noch nicht bezahlt" habe ich in der Datenbank eine Column "tbl_invoice_paid" (Typ: tinyint(1)) - 0 oder 1.
Im DGV wird diese Column als DataGridViewCheckBoxColumn dargestellt.
Das Filtern der DataTable "tbl_invoice" habe ich
Versuch a) Mit einer BindingSource (über den Designer aufs Form gepackt und gefüllt)
VB.NET-Quellcode
- Private Sub frm_invoice_overview_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- bsInvoice.DataSource = DS_Global.Tables("tbl_invoice")
- bsInvoice.Filter = " AND tbl_invoice_paid = 0 AND tbl_invoice_should_pay <'" & Format(Date.Now, "yyyy-MM-dd") & "'"
- bsInvoice.Sort = "tbl_invoice_number, tbl_invoice_date"
- dgv_invoice_overview.DataSource = bsInvoice
- End Sub
Versuch b) Mit einer DataView realisiert
VB.NET-Quellcode
- Private Sub frm_invoice_overview_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- dvInvoiceDataView = DS_Global.Tables("tbl_invoice").DefaultView
- dvInvoiceDataView.RowFilter =" AND tbl_invoice_paid = 0 AND tbl_invoice_should_pay <'" & Format(Date.Now, "yyyy-MM-dd") & "'"
- dvInvoiceDataView.Sort = "tbl_invoice_number, tbl_invoice_date"
- dgv_invoice_overview.DataSource = dvInvoiceDataView
- End Sub
Angenommen, der Anwender hat nun in der DGV fünf "offene" - noch nicht bezahlte Rechnungen vor sich...
Wenn er nun in Row 2 (oder 0, 1, 3, 4) die Checkbox der Column "tbl_invoice_paid" klickt und diese damit auf "True" setzt, er jetzt die Row 2 verlässt (wenn er in der Row bleibt, bleibt auch die Row), schlägt der Filter zu und die Row ist aus dem DGV - also nicht mehr sichtbar.
Das möchte ich aber nicht! Die Row 2 soll angezeigt werden, bis der Anwender mit einem Button ALLE Änderungen akzeptiert (da liegt mein Problem nicht).
Wenn ich für das DGV noch weitere (außer Checkboxes) Filter erstelle, kann ich in dem DGV alle sonstige DataGridViewTextBoxColumn ändern, ohne das die Row verschwindet, wenn ich eine andere Row anwähle.
Im o. g. Filter kann ich z.B. im DGV das Datum in der Column "tbl_invoice_should_pay" außerhalb des Filters ändern und die Row bleibt im DGV, wenn ich den Focus der Row ändere
Grundsätzlich klappt die Definition des Filters auch mit
bzw.
Eine Google-Recherche hatte mir u. a. ein Ergebnis gebracht, worauf ich mir die Doku durchgelesen hatte, aber nichts fand (was evtl. an dem vorm Bildschirm lag): vbforums.com/showthread.php?65…18&viewfull=1#post4038718
Ich denke, dass es an der DataGridViewCheckBoxColumn und dessen Verhalten beim Verlassen der aktuellen Row liegt, habe aber keinen Plan, wie ich das realisieren soll
Ich würde mich sehr über Hilfe bei meinem Problem freuen.
Viele Grüße,
Laret
P.S. Natürlich könnte ich die Source (DataTable) mit SQL vorfiltern. Ich möchte das aber wenn es geht vermeiden, da ich die Table nunmal bereits geladen habe (für neue Rechnungen, Statistik, etc).