myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » In einer DataGridView suchen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

In einer DataGridView suchen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg


Adri_C ist offline

In einer DataGridView suchen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwendetes Datenbanksystem: <MySql>

Hallo zusammen,

ich bin ziemlich frisch mit C# unterwegs.

Ich habe eine MySql Datenbank erstellt und rufe die Daten in einer DataGridView ab. Kann dann Zeilen markieren und diese markierten Zeilen dann in Textboxen darstellen. Kann neue Datensätze erstellen, ändern und auch Datensätze Löschen.

Jetzt möchte ich noch über eine Textbox in den Daten suchen und die DataGridView soll mir dann die entsprechenden Daten anzeigen. Wenn die Textbox wieder leer ist sollen dann auch wieder alle Datensätze gezeigt werden.

Na ja wenn ich wüste wie man hier mehr Daten hochladen kann würde ich euch das gesamte Projekt hochladen (VisualStudio2017)
Ich hoffe das das Bild mit dem was ich zum start vor habe auch angezeigt wird



Ich hoffe ihr konntet mich etwas verstehen und gebt mir auch noch ein paar Tips zum Posten von Fragen.

Grüße

Adrian

Adri_C hat dieses Bild (verkleinerte Version) angehängt:
Datenbank.png
Volle Bildgröße

11.07.2019 20:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.791
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Suchen sollte man eigentlich in den Daten, nicht in der UI.
Alle Daten, die dann den Kriterien entsprechen, bindet man dann in der UI.
 [Artikel] MVVM und DataBinding (gilt auch für Windows Forms, wenn auch dort eher via MVP Pattern).

Ansonsten hast Du keine Frage in Deinem Beitrag gestellt, die man beantworten könnte.
(Bitte auch nicht das Projekt hochladen, siehe  [Hinweis] Wie poste ich richtig? )
11.07.2019 21:21 Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

na ja doch die DataGridView ist ja voll mit Daten ich möchte jetzt in der oberen Textbox mein Suchbegriff schreiben. Sobald ein erster Buchstabe geschrieben ist soll in der DataGridView nur noch die Datensätze dargestellt werden die im Namen den entsprechenden Buchstaben haben.

Wenn ich das richtig verstehe dann sollte man in den Daten selbst suchen und nicht in einer Komponente wo die Daten dargestellt werden?!

Habe jetzt an dem jetzigen stand eine Ewigkeit gesessen um es so hin zu bekommen und jetzt habe ich absolut keine Idee wie ich das suchen gestalten soll.
11.07.2019 21:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.791
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Adri_C:
Wenn ich das richtig verstehe dann sollte man in den Daten selbst suchen und nicht in einer Komponente wo die Daten dargestellt werden?!

Prinzipiell ja. Es ist bei vielen vielen Daten gar nicht möglich, alle in die UI zu laden.
Das macht a) wenig sinn, weil es kein User überblicken könnte und b) hast Du einfach Limits wie den Arbeitsspeicher oder ganz einfach die Performance, dass Du gar nicht alles laden kannst.

Zitat von Adri_C:
Habe jetzt an dem jetzigen stand eine Ewigkeit gesessen um es so hin zu bekommen und jetzt habe ich absolut keine Idee wie ich das suchen gestalten soll.

 Google-Suche nach c# datagridview search filter
Gibt tausende Treffer wie eine einfache, GridView-basierte Filterfunktion (eben mit den Limits) funktioniert.
11.07.2019 21:55 Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja das ist verständlich das man bei sehr vielen Daten diese nicht in einer DataGridView darstellt macht keinen Sinn bei fast unendlich vielen Daten.

Ja das Blöde ist das die meisten Beispiele immer mit den vorbereiteten Funktionen in VisualStudio funktionieren wie zum Beispiel "BindingSource" und "BindingNavigator" und dann kann man die Daten schön über entsprechende Menüführungen verbinden.

Das mag gut funktionieren wenn man SQL Datenbanken verwendet bei MySql klapt da bei mir garnischts.

Habe mir ein Buch gekauft C# und MySql und das ganze Buch ist mit diesen "BindingSource" und "BindingNavigator" aufgebaut was nichts nützt.
11.07.2019 22:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ach ja wer das gesamte Projekt haben möchte dem schicke ich es natürlich gerne.

Es muss dann nur die entsprechende Datenbank in mySql erstellt werden.
11.07.2019 22:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.791
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sorry, aber das Forum ist kein kostenloser Quellcodegenerator.
 [Hinweis] Wie poste ich richtig?
11.07.2019 23:51 Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 341
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Adri_C:
Das mag gut funktionieren wenn man SQL Datenbanken verwendet bei MySql klapt da bei mir garnischts.

Was hindert dich dann auf MS SQL umzusteigen? Die Express Version ist sogar kostenlos....
12.07.2019 07:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
glandorf glandorf ist männlich
myCSharp.de-Mitglied

Dabei seit: 07.10.2016
Beiträge: 35
Entwicklungsumgebung: Visual Studio
Herkunft: Chemnitz


glandorf ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

sind deine Daten, die in der DataGridView angezeigt werden, in einer DataTable?

Wenn ja, DataTable hat eine DefaultView Eigenschaft und diese lässt sich filtern.

glandorf
12.07.2019 11:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 341
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von glandorf:
sind deine Daten, die in der DataGridView angezeigt werden, in einer DataTable?
glandorf

Damit löst er aber nicht das Problem, dass er auf der Datenquelle filtern sollte und nicht erst auf dem Client... Warum unnötige Daten auf den Client übertragen?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am 12.07.2019 12:42.

12.07.2019 12:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Sorry, aber das Forum ist kein kostenloser Quellcodegenerator.
 [Hinweis] Wie poste ich richtig?

Entschuldige du musst dich nicht so fühlen als müsstest du mir einen Quelltext schreiben. Das möchte ich schon alleine und vor allem irgendwann auch verstehen.

glandorf danke für dein Diskussionsbeitrag! Ja meine Daten sind in einem DataTable

C#-Code:
string selectQuery = "SELECT * FROM test.kalorien";  // Hier wird ein String aus der Datenbank
                                                                              // selectiert
DataTable table = new DataTable();                          // Erzeugt eine Tabelle
MySqlDataAdapter adapter = new MySqlDataAdapter(selectQuery, connection); //Adapter mit
                                                                                       // globalem
                                                                                      // Zugriff auf den Server und Selektion
                                                                                      //aus der Datenbak
adapter.Fill(table); // Der Adapter wird mit der Tabelle gefüllt
dataGridView1.DataSource = table; // Zuordnung der Datasource der GridView mit der Tabelle

Da werde ich mal intensiver hinsehen denn im ersten Schritt würde mir das Filtern in der gesamten dargestellten Tabelle (sind ja nicht so viele Daten) helfen.
Aber es ist natürlich interessant sich nur die Gefilterten Daten aus der Datenbank zu holen. Das meint ihr doch mit:

"dass er auf der Datenquelle filtern sollte und nicht erst auf dem Client" ?
12.07.2019 13:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Stefan.Haegele:
Zitat von Adri_C:
Das mag gut funktionieren wenn man SQL Datenbanken verwendet bei MySql klapt da bei mir garnischts.

Was hindert dich dann auf MS SQL umzusteigen? Die Express Version ist sogar kostenlos....

Ja gute Frage ich habe mich für MySql entschieden da ich mir für zu hause eine NAS-Festplatte (Synology) zulegen möchte um darauf die Datenbank abzulegen. Da habe ich gelesen kann ich nur eine MySql Datenbank ablegen und aus diesem Grunde habe ich versucht mich in MySql einzuarbeiten.

Aber danke werde mir mal die Express Version von SQL ansehen. Vielleicht geht's ja doch auf einer NAS-Festplatte?
12.07.2019 13:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.276
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

So wie glandorf geschrieben hat, kannst du mittels DataView.RowFilter die Daten filtern, s.a.  DataView RowFilter Syntax [C#].

Für dich also so in etwa:

C#-Code:
DataView dataView = table.DefaultView;
dataGridView1.DataSource = dataView;

dataView.RowFilter = "Name LIKE '%" + textBoxSearch.Text + "%'";
12.07.2019 13:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 341
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Adri_C:
C#-Code:
string selectQuery = "SELECT * FROM test.kalorien";

Das ist der Supergau einer jeden SQL Afrage - und für mich ein absolutes NoGo
12.07.2019 13:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 341
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
C#-Code:
DataView dataView = table.DefaultView;
dataGridView1.DataSource = dataView;

dataView.RowFilter = "Name LIKE '%" + textBoxSearch.Text + "%'";

Schon richtig, aber er lädt ja trotzdem erst mal alle Daten zum Client - eine Filterung auf SQL-Server Ebene ist doch viel einfache rund effektiver...
12.07.2019 13:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.276
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Aber wenn doch zu Beginn erst alle Daten geladen werden und dann optional nach einem Namen gefiltert werden können?
Und mit einer leeren Suchmaske sollen ja wieder alle Daten angezeigt werden. Warum also jedesmal eine neue Datenbankabfrage starten?
12.07.2019 13:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 341
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
Warum also jedesmal eine neue Datenbankabfrage starten?

Das mag bei kleinen DB akzeptabel sein - aber was wenn die Datenbank mal ein paar Einträge mehr hat? Ich finde es ein NoGo immer erst alles auf den Clinet zu übertragen und dann dort zu filtern.

Meine Vorgehensweise wäre:

Leere Maske zum Start - danach wird mit Suchstring selektiert und dargestellt.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am 12.07.2019 13:54.

12.07.2019 13:54 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.791
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Mehraufwand das richtig, ordentlich zu machen ist so gering, dass es für Client-side Filtering quasi kaum eine Rechtfertigung gibt.
Vor allem auch, da der eingebaute Filtermechanismus sehr eingeschränkte Funktionalitäten hat.
12.07.2019 14:20 Beiträge des Benutzers | zu Buddylist hinzufügen
Adri_C Adri_C ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.07.2019
Beiträge: 7
Herkunft: Brandenburg

Themenstarter Thema begonnen von Adri_C

Adri_C ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Th69:
So wie glandorf geschrieben hat, kannst du mittels DataView.RowFilter die Daten filtern, s.a.  DataView RowFilter Syntax [C#].

Für dich also so in etwa:

C#-Code:
DataView dataView = table.DefaultView;
dataGridView1.DataSource = dataView;

dataView.RowFilter = "Name LIKE '%" + textBoxSearch.Text + "%'";

Das hat ja erstmal sehr gut funktioniert!

Ich melde mich erst so spät da ich versucht habe sql zu installieren das waren ganze zwei Tage und alles für umsonst dan bin ich wieder zurück auf mysql und habe den Row.Filter getestet.
16.07.2019 11:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.07.2019 03:25