Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Ermitteln von Daten aus einer SQL-Datenbank
Doug123 - Di 22.07.08 12:48
Titel: Ermitteln von Daten aus einer SQL-Datenbank
Hallo!
Ich habe mal eine Frage zur Vorgehensweise beim Laden der Daten aus einer SQL-Datenbank. In meinem Programm habe ich ein Fenster mit einem TabControl drauf. Im ersten Register befindet sich ein DGV, welches ich ganz normal fülle. Sprich ich hole mir per "DataAdapter.Fill" die Daten aus der Datenbank und weise das DataSet nachher einer BindingSource zu, welche ich dann ans DGV binde. Das klappt auch alles soweit.
Nun möchte ich eine zweite Tabelle im zweiten Register (auch in einem DGV) anzeigen. Diese Daten sind jeweils einem Datensatz aus der ersten Tabelle zugeordnet. D.h., wenn ich auf die zweite Tablasche wechsel, sollen die dazugehörigen Datensätze ermittelt und angezeigt werden.
Nun zu meiner Frage:
Erstellt man sich da am besten eine Methode, in der man immer eine DataTable als Rückgabewert erhält und bindet diese ans DGV oder wie würdet ihr das machen?
Gruß
Doug
Th69 - Di 22.07.08 13:42
Da ich gerade so eine Methode selbst geschrieben habe, schenke ich sie dir mal -)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private bool ReadData(string sQuery, IDbDataAdapter da, DataSet dataset) { using(SqlConnection sqlConn = new SqlConnection(sConnection)) using(SqlCommand sqlCmd = sqlConn.CreateCommand()) { sqlCmd.CommandText = sQuery; sqlConn.Open();
dataset.Reset(); da.SelectCommand = sqlCmd; da.Fill(dataset);
return dataset.Tables != null && dataset.Tables[0] != null; } }
private SqlDataAdapter daUsers = new SqlDataAdapter(); private DataSet datasetUsers = new DataSet();
private void ReadUsers() { string sQuery = "select * from Users"; if(ReadData(sQuery, daUsers, datasetUsers)) { dataGridViewUsers.DataSource = datasetUsers.Tables[0]; } } |
Alternativ kann die Methode ReadData() auch gleich die Tabelle zurückliefern (oder null) und du kannst direkt die Bindung durchführen (alternativ auch über eine BindingSource).
Bei Tabwechsel mußt du dann nur den aktuellen Datensatz (der ersten DGV) ermitteln und mit dem entsprechend modifizierten Select-Statement dann deine angepaßte ReadUsers() aufrufen (ich habe bei mir Users und UserActions).
Doug123 - Mi 23.07.08 15:10
Danke für deine Antwort....hat mir sehr geholfen!
Habe bei mir wohl noch eine neue BindingSource eingebaut und diese dann ans zweite DGV gebunden.
Eine Frage hätte ich da aber noch:
Die Tabelle, die an das zweite DGV gebunden ist, ist dazu da um auch Dokumente abzuspeichern. Also ich zeige im DGV nur die Dokumentnamen usw. an. Was müsste ich denn machen, um einen neuen Datensatz abspeichern zu können?
Müsste ich 1. ganz normal einen neuen Datensatz in der DataTable anlegen (mit den Bezeichnungen usw.) und diesen in die Datenbank schreiben und danach danach dann als 2. Schritt nochmal extra die Datei per "ExecuteNonQuery" in das Datenfeld der Tabelle schreiben?
Vielen Dank nochmal!
Gruß
Doug
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!