Audi Geschrieben 24. März 2009 Geschrieben 24. März 2009 Guten Tag, wie schon erwähnt möchte ich meine DataGridView auf der Form mit Werten aus meiner Datenbank füttern. Die DataGridView bekommt Tabellen aus dem DataSet zugewiesen, die Spaltennamen werden in der DataGridView angezeigt, aber ohne Werte:( Wie soll ich da vorgehen, weiß echt nicht mehr weiter... Ich arbeite mit C# und einer Access Datenbank in der 4 Tabellen sind. OleDbConnection connect = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pfad); //Zugriff auf Tabellen der Datenbank OleDbCommand cmd = new OleDbCommand(); cmd.Connection = connect; cmd.CommandText = "SELECT * FROM Tabelle1"; DataSet ds = new DataSet(); OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); //Datenbankverbindung öffnen connect.Open(); adapter.Fill(ds); dgvShow.DataSource = ds; dgvShow.DataMember = ds.Tables[0].TableName; //Datenbankverbindung schließen connect.Close(); Zitieren
a3quit4s Geschrieben 24. März 2009 Geschrieben 24. März 2009 Hallo, versuch mal: dgvShow.DataSource = ds; dgvShow.DataMember = ds.Tables[0].TableName; dgvShow.DataBind(); Zitieren
Audi Geschrieben 24. März 2009 Autor Geschrieben 24. März 2009 Danke für die Antwort, aber ich habe es jetzt über DataTable gemacht und es funktioniert:) Zitieren
oxygen Geschrieben 29. August 2009 Geschrieben 29. August 2009 Ich frag jetzt mal hier, weil ich eigentlich fast das gleiche Problem habe: Ich schreibe grerade ein Personalverwaltungsprogramm für meine Feuerwehrabteilung. Zur Datenhaltung verwende ich eine Access-Datenbank, das Programm schreibe ich in C#. Meine Datenbank "Feuerwehrverwaltung" besitzt eine Abfrage "Steckbrief", mit der ich die Daten aus 2 Tabellen abrufe. Im Programm habe ich diese Abfrage über eine Binding Source "steckbriefBindingSource" eingebunden und versorge über diese Binding Source ein DataGridView mit Werten. Das DataGridView stellt die Header der anzuzeigenden Werte einwandfrei dar und benutzt in den Feldern auch die richtigen Datentypen, allerdings werden keine Werte dargestellt. Ich vermute, dass ich noch irgendwie die Daten aus der DB abrufen muss, allerdings weiß ich nicht, wie ich dies zu tun habe. Alle Versuche (z.B. Form, Binding Source, DataGridView refresh/update...) sind fehlgeschlagen, deshalb hoffe ich, dass ihr mir das hier genauer erklären könnt. Ich vermute, dass mir die oben genannte Lösung helfen könnte, allerdings hab ich nicht ganz durchschaut, welche Werte ich wie abändern muss, damit sie auf mein Projekt passen, da ich noch nicht 100-prozentig in C# drin bin und das mein erstes Projekt mit Datenhaltung ist. Das einzige, was ich im Bezug auf das Verknüpfen der DB mit dem DataGridView hab, ist das, was Visual Studio (ich verwende VS 2008) gemacht hat: private void Form1_Load(object sender, EventArgs e) { // TODO: Diese Codezeile lädt Daten in die Tabelle "feuerwehrverwaltungDataSet.Steckbrief". Sie können sie bei Bedarf verschieben oder entfernen. this.steckbriefTableAdapter.Fill(this.feuerwehrverwaltungDataSet.Steckbrief); } Ich hoffe, ihr könnt mir helfen, das wär nämlich ziemlich blöd, wenn an sowas das ganze Projekt schreitern würde. Danke schonmal im Vorraus. Zitieren
.NETter Geschrieben 30. August 2009 Geschrieben 30. August 2009 Hallo, der Codeausschnitt wurde vom VS erstellt, oder? Du benutzt stark typisierte Datasets (strongly typed Datasets). In Deinem Projekt wirst Du eine Datei mit der Endung .xsd finden. Hier sind die Tableadapter definiert und können dort auch über die Oberfläche bearbeitet werden. Dort wirst du eine Art grafische Tabellendefinition. Im unteren Teil dieser Definition steht dann ein Abschnitt mit der Definition des Tableadapters (steckbriefTableAdapter). Hier kannst Du über eine Rechtsclick die Eigenschaften des Tableadapters abrufen. Unetr anderem findest Du hier auch die Connection-Eigenschaft die Du mal untersuchen solltest um sicherszustellen die richtige Access-Datei erwischt zu haben. Kontrolliere auch die darunterstehende Fill/GetData-Methode in der definiert wird wie und welche Daten abgerufen werden sollen. Ansonsten kannst Du auch gerne mal ein Beispielprojekt schicken, dann kann ich da mal den Fehler(?) suchen. Gruß, Thomas Zitieren
oxygen Geschrieben 30. August 2009 Geschrieben 30. August 2009 Danke, deine Antwort hat mich zumindest mal einen kleinen Schritt weiter gebracht. Ich habe gerade die Abfrage des Tableadapters kontrolliert und habe sie jetzt soweit, dass ich im Fenster, in dem man sie Editiert die Werte so bekomme, wie ich sie haben möchte ->die Verbindung von der DB an bis zum TableAdapter funktioniert. Wenn ich im Dropdown Fenster des DataGridView auf "Vorschau" gehe, werden die Daten auch korrekt angezeigt. Das DataGridView zeigt mir die Werte allerdings immer noch nicht an, also werde ich wohl irgendwo noch eine Methode oder so ausführen müssen, die den Inhalt des TableAdapters in das DataGridView übernimmt, oder? Zitieren
.NETter Geschrieben 2. September 2009 Geschrieben 2. September 2009 Hallo, wenn die Vorschau die korrekten Daten anzeigt, solltest Du hier eigentlich nichts mehr tun müssen. Propiere mal eine zweite DataGridView an die gleiche Datasource zu hängen und schau mal was dabei raus kommt. Eine DataGridView ist eben eine Dataview und kann gefilter und sortiert werden. Wenn die neue DataGridView im Gegensatz zur ersten etwas anzeigen sollte, dann hast Du irgendeinen Filter gesetzt. Gruß, Thomas Zitieren
oxygen Geschrieben 2. September 2009 Geschrieben 2. September 2009 Hab das eben mal ausprobiert, leider ohne Erfolg. Wenn ich eine zweite DataGridView einfüge und sie an den gleichen und auch an einen anderen Tableadapter der Datasource hänge, passiert nichts. Die Vorschau kommt, wie sie soll, aber das DataGridView übernimmt komischerweise die Daten nicht. Ich habe einen Datensatz drin, der wird aber nicht angezeigt. Hatte schon gedacht, dass es unter Umständen daran liegen könnte, dass ich das DataGridView auf einer Tabcontrol hab (Verzweiflungsidee ^^) und hab eine Direkt aufs Form gesetzt, leider ohne Erfolg. Bin jetzt bald soweit, dass ich meine Datenhaltung irgendwie über XML oder löse und auf ne Datenbank verzichte, wär aber eher suboptimal, da dann, falls ich mal nicht mehr in dieser Wehr bin, keine Sau mehr was mit meiner Entwicklung machen kann, da ich dann der Einzige bin, der die Daten richtig verwalten und Bearbeiten kann. Mit ner *.mdb hätten einige wenigstens noch die möglichkeit, an der Datenhaltung zu arbeiten, falls ich wegziehe oder so. Zitieren
.NETter Geschrieben 3. September 2009 Geschrieben 3. September 2009 Hallo, ja das wundert mich jetzt schon etwas... Das Command zum füllen fürst Du ja aus: private void Form1_Load(object sender, EventArgs e) { // TODO: Diese Codezeile lädt Daten in die Tabelle "feuerwehrverwaltungDataSet.Steckbrief". Sie können sie bei Bedarf verschieben oder entfernen. this.steckbriefTableAdapter.Fill(this.feuerwehrverwaltungDataSet.Steckbrief); } Wenn Du möchtest (und natürlich auch darfst) kannst Du mir das Projekt gerne mal schicken. So eine Ferndiagnose ist natürlich sehr schwer. Aber ich denke es ist nur eine Kleinigkeit. Wie hast Du die Daten genau an die DataGridView gebunden? Du wählst als Datenquelle aber eine "BindingSource" aus, oder? Zitieren
oxygen Geschrieben 3. September 2009 Geschrieben 3. September 2009 Die Datenbank ist so angebunden, dass ich in einer BindingSource die Datenbank eingebunden hab und in der DataGridView über die BindingSource eine Abfrage aus der Datenbank an die DataGridView binde. Werde es mal noch ohne zusätzliche Funktionen, die ich im Programm auch benötige, aussenrum probieren, sollte es dann nicht klappen, werde ich dieses Projekt mal hier rein stellen, rechtlich ist das kein Problem, da sowohl Datenbank als auch Programm komplett von mir erstellt sind. Zitieren
oxygen Geschrieben 6. September 2009 Geschrieben 6. September 2009 Also Leute, ich hab grade nochmal rumprobiert mit einem ganz einfachen Projekt, in der ich eine Datenbank mit nur einer Tabelle, die 4 Spalten verwende. Auch hier schaffe ich es nur bis zur Datenvorschau, bekomme die eingetragenen Werte aber nicht auf mein DataGridView, wenn ich das Projekt dekompiliere. Ich habs an diesen Beitrag mal angehängt, wenn ihr so nett wärd, mal drüber zu schauen und mir meinen Fehler erleutert, wäre das sehr hilfreich. Im Moment arbeite ich an der Datenhaltungsschicht des Projekts, aber die Software soll trotzdem noch entwickelt werden, also benötige ich die Technik. Schonmal Danke im Vorraus.Access DataGridView.rar Zitieren
.NETter Geschrieben 6. September 2009 Geschrieben 6. September 2009 Hallo ! Ja ich habe mir dein Projekt mal heruntergeladen und auch getestet. Was soll ich sagen... es läuft. Ich bekomme genau eine Zeile mit Daten im DataGridView angezeigt (Eintrag 1, Eintrag 2 usw.). Da ich nun davon ausgehe, dass das Projekt auch OK ist kannst Du noch folgende Dinge prüfen. Welche Version von Visual Studio nutzt Du? Hast Du das Projekt zwischen verschiedenen VS Versionen hin und her kopiert? Express Edition ist teilweise eingeschränkt... Sind Servicepacks installiert? Ist die richtige Version der MDAC installiert? Gruß, Thomas Zitieren
oxygen Geschrieben 7. September 2009 Geschrieben 7. September 2009 Also, DAS macht mich jetzt richtig stutzig! Ich benutze Visual Studio 2008 Version 9.0.30729.1 SP und .Net 3.5 SP1. MDAC sagt mir jetzt nichts, kannst du mir da mehr drüber erzählen? Ich benutz noch nicht allzu lange VS. Beide Projekte haben meinen Rechner nicht verlassen oder wurden in verschiedenen IDEs bearbeitet. An was könnte es sonst liegen? Ich benutze als Betriebssystem Windows Vista Home Premium 64-Bit, bis meine Version von Windows 7 geliefert wird. Zitieren
hasna Geschrieben 31. Mai 2010 Geschrieben 31. Mai 2010 Also, DAS macht mich jetzt richtig stutzig! Ich benutze Visual Studio 2008 Version 9.0.30729.1 SP und .Net 3.5 SP1. MDAC sagt mir jetzt nichts, kannst du mir da mehr drüber erzählen? Ich benutz noch nicht allzu lange VS. Beide Projekte haben meinen Rechner nicht verlassen oder wurden in verschiedenen IDEs bearbeitet. An was könnte es sonst liegen? Ich benutze als Betriebssystem Windows Vista Home Premium 64-Bit, bis meine Version von Windows 7 geliefert wird. Hy oxygen, ich habe das gleiche Problem, aber nur auf den Tabcontrols, auch verschiedene tabcontrols mit Datenanbindungen. Hast du evtl. mittlerweile schon eine Lösung gefunden? Grüße Bernd Zitieren
oxygen Geschrieben 31. Mai 2010 Geschrieben 31. Mai 2010 Ja, habe ich, es war eine Lücke in meiner Denkweise beim Programmieren. Ich hab nämlich den Compilermodus auf Auto gestellt, der dadurch immer 64Bit compiliert hat. Leider kann Access aber nur 32Bit und deshalb war mein Programm inkompatibel zur Datenbank. Wenns daran liegt, solltest du in den Eigenschaften des Projektes einfach den Compiler auf 32Bit-CPU stellen müssen und es funktioniert. Zitieren
Gateway_man Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Noch ein kleiner Hinweis. Bei deiner Code Konstellation zum füllen des Dataset's kannst du dir das connect.open() und close() sparen. Der Dataadapter macht dies beim Aufruf der Fill Methode bereits selbständig. Lg Gateway Zitieren
hasna Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Hallo, vielen Dank für die Infos Euch beiden. Da schau ich später gleich mal nach. Viele Grüße Bernd Zitieren
hasna Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 (bearbeitet) Hallo Oxygen, danke für die Info, aber funzt leider nicht. Vielleicht mache ich auch was falsch, nur kurz: habe ein Tabcontrol mit 2 Registrierkarten. Habe darauf per Drag and Drop meine Tabelle gezogen und den Update-Befehl eingetragen. Auf der Registrierkarte1 habe ich Tabelle Kunden und wurde der Navigator auch automatisch mit verknüpft. Auf der 2. Registrierkarte bin ich genauso vorgegangen mit einer anderen Tabelle, jedoch kommt zum einen der Navigator nicht mit (den ich auch nicht brauch), aber trotz meinem Update-Befehl werden die Daten in die DB nicht zurückgeschrieben. Hab mich echt schon wund gegoogled, find aber absolut nix. Vielleicht kannst Du mir weiterhelfen? Viele Grüße und Danke Bernd Bearbeitet 1. Juni 2010 von hasna Zitieren
hasna Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Habs rausgefunden! hatte den Update an die falsche Stelle gesetzt :-(( Grüße Bernd Zitieren
Mcolli Geschrieben 1. Juni 2010 Geschrieben 1. Juni 2010 Wollte an der Stelle mal den Tipp geben für Datenbankverbindungen den Data Access Aplication Block der Microsoft Enterprise Library, eine .Net Erweiterung, zu nutzen. Die Enterprise Library ist KOSTENLOS auch für komerzielle zwecke. Dies bietet die Möglichkeit auf hoher Abstraktionsebene auf Datenbanken aller Art zuzugreifen, dies beinhaltet auch Access, Oracle und co. Zudem lassen sich durch eine Erweiterung der App.config, Connection Strings registrieren und man muss somit bei einer Veränderung der Datenbank-IP / - Version / -Art oder so das Projekt nicht neu Compelieren und Ausrollen. Die Syntax ist zudem sehr intuitiv und einfach. Alle in einem Projekt eingebundenen Enterprise Library DLLs werden ins Ausgabeverzeichnis des Projektes kopiert und somit ist bei der Auslieferung eines Projektes keine zusätzliche Installation der Enterprise Library auf den Client Rechnern nötigt. Des weiteren sind in der Enterprise Library verschiedene Andere Application Block Vorhanden die z.B. ein App.config gesteuertes Logging in allen Möglichen Formen ermöglicht oder die App.config oder andere Programmteile leich Verschlüsselbar machen. Get Startet with the Data Access Application Block Zitieren
oxygen Geschrieben 2. Juni 2010 Geschrieben 2. Juni 2010 Cool, danke für den Tip! Hört sich interessant an, vor allem, weil ichs im Moment nicht gebacken bekomm, aus dem Projekt in die DB zu schreiben, vielleicht hilft mir das ja weiter. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.