Zum Inhalt springen

C# DataGridView mit Werten füllen


Empfohlene Beiträge

Geschrieben

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();

  • 5 Monate später...
Geschrieben

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.

Geschrieben

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

:)

Geschrieben

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?

Geschrieben

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

Geschrieben

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.

Geschrieben

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?

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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.

  • 8 Monate später...
Geschrieben
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

Geschrieben

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.

Geschrieben

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

Geschrieben (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 von hasna
Geschrieben

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

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...