Hey Ich hab ein kleines Problem,
ich habe mein WPF Projekt mit meiner Datenbank verbunden.
Nun sollen die neu hinzugefügten Daten in einer XamDataGrid angezeigt werden,
bei einem Namen macht er das aber bei dem zweiten nicht. Er durchläuft die schleife nur einmal, müsste aber öfter durchgehen vlt. könnt ihr mir ja helfen.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//fp_GetData();
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=prakdb.accdb";
con.Open();
var objDataTable = new DataTable();
objDataTable.Columns.Add("ID");
objDataTable.Columns.Add("Name");
objDataTable.Columns.Add("Vorname");
objDataTable.Columns.Add("Wohnort");
objDataTable.Columns.Add("Plz");
objDataTable.Columns.Add("Land");
objDataTable.Columns.Add("Telefonnummer");
objDataTable.Columns.Add("E-Mail");
objDataTable.Columns.Add("Strasse und Hausnummer");
string strSql = "SELECT * from Adressen";
OleDbCommand cmd = new OleDbCommand(strSql, con);
OleDbDataReader dr = cmd.ExecuteReader();
foreach (var objRecord in dr)
{
var objRow = objDataTable.NewRow();
objRow["ID"] = dr[0];
objRow["Name"] = dr[1];
objRow["Vorname"] = dr[7];
objRow["Wohnort"] = dr[2];
objRow["Plz"] = dr[3];
objRow["Land"] = dr[4];
objRow["Telefonnummer"] = dr[5];
objRow["E-Mail"] = dr[6];
objRow["Strasse und Hausnummer"] = dr[9];
objDataTable.Rows.Add(objRow);
}
con.Close();
xamDataGrid1.DataSource = objDataTable.Rows;
}
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Der DataReader liest auch nur immer eine Zeile aus der Datenbank.
Mit dr.Read() liest Du die nächste Zeile.
Siehe http://www.seven-c.de/files/datenbankenhowto.htm#5 Kapitel 5
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Vielen Dank für deine Hilfe leider funktioniert es immer noch nicht 😦.
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Du musst schon konkret sagen, was nicht funktioniert bzw. wie die Fehlermeldung lautet. Gut wäre auch, wenn du deinen geänderten Code postest.
Hast du Bernds Tutorial mal näher angesehen? Dort ist alles sehr gut erklärt und deine Anforderungen werden genau abgedeckt.
foreach (var objRecord in dr)
ersetzen durch
while(dr.Read())
Ich bekomme kein Fehlermeldung, es wir einfach nur ein Element in den XamDataGrid geschrieben aber eig. müssten dort 3 reingeschrieben werden
mein neuer Code der immernoch nicht funktioniert
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//fp_GetData();
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=prakdb.accdb";
string strSql = "SELECT * from Adressen";
OleDbCommand cmd = new OleDbCommand(strSql, con);
cmd.Connection = con;
con.Open();
var objDataTable = new DataTable();
objDataTable.Columns.Add("ID");
objDataTable.Columns.Add("Name");
objDataTable.Columns.Add("Vorname");
objDataTable.Columns.Add("Wohnort");
objDataTable.Columns.Add("Plz");
objDataTable.Columns.Add("Land");
objDataTable.Columns.Add("Telefonnummer");
objDataTable.Columns.Add("E-Mail");
objDataTable.Columns.Add("Strasse und Hausnummer");
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
var objRow = objDataTable.NewRow();
objRow["ID"] = dr[0];
objRow["Name"] = dr[1];
objRow["Vorname"] = dr[7];
objRow["Wohnort"] = dr[2];
objRow["Plz"] = dr[3];
objRow["Land"] = dr[4];
objRow["Telefonnummer"] = dr[5];
objRow["E-Mail"] = dr[6];
objRow["Strasse und Hausnummer"] = dr[9];
objDataTable.Rows.Add(objRow);
xamDataGrid1.DataSource = objDataTable.Rows;
}
dr.Close();
con.Close();
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Hast du dir mal im Debugger die DataTable angeguckt, ob da auch alles drin steht?
Etwas eigenartig finde ich, dass du nicht direkt die DataTable als DataSource ans Grid hängst (sondern die Rows-Eigenschaft). Sieht es dann anders aus (xamDataGrid1.DataSource = objDataTable;
)?
Wenn du dann eh alles in eine DataTable schreibst, warum nimmst du nicht gleich einen (OleDb)DataAdapter? Dann kannst du mit der DbDataAdapter.Fill-Methode (DataSet) (System.Data.Common) gleich alles in die DataTable schreiben.
var dataTable = new DataTable();
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=prakdb.accdb";
string selectCommandText = "SELECT * from Adressen";
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectCommandText,connectionString))
dataAdapter.Fill(dataTable);
xamDataGrid1.DataSource = dataTable;
Hi ich habe es verändert jedoch muss ich bei
xamDataGrid1.DataSource = dataTable.Rows machen ohne Rows bekommt er ein Fehler : Fehler 66 Der Typ "System.Data.DataTable" kann nicht implizit in "System.Collections.IEnumerable" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)
mein code sieht gerade so aus:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var dataTable = new DataTable();
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=prakdb.accdb";
string selectCommandText = "SELECT * from Adressen";
using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(selectCommandText, connectionString))
dataAdapter.Fill(dataTable);
xamDataGrid1.DataSource = dataTable.Rows;
}
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
mein code sieht gerade so aus
Und funktioniert oder nicht?
Wenn nicht: Konkrete Fragen stellen.
Nein es funktioniert nicht und meine frage wäre warum ich bei
xamDataGrid1.DataSource = dataTable.Rows das Rows setzen muss bei deinem Lösungsvorschlag benutzt du das nicht ich muss es aber setzten warum ?
tut mir leid für meine Blödheit habe aber erst gestern angefangen wirklich zu programmieren mit c#
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Weil ich sonst mit Grids arbeite, die mehrere Sachen als DataSource umgehen können (IEnumerable, IList, DataTable, ...). Wie es aussieht, aktzeptiert das xamDataGrid (ich nehme an, das ist das Infragistics-Grid für WPF?) nur ein Objekt vom Typ IEnumerable.
Was muss ich denn ändern damit nun alle Elemente angezeigt werden?
Ich komm nämlich nicht mehr weiter
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Was muss ich denn ändern damit nun alle Elemente angezeigt werden?
Erst einmal wäre zu klären, ob die Datenquelle, die du an das Grid hängst, wirklich alle Elemente enthält.
Denn es könnte ja auch daran liegen, dass du von deiner Abfrage nur ein Element angezeigt bekommst und deshalb auch nur ein Element im Grid angezeigt wird. Ganz anders würde es aussehen, wenn die Datenquelle wirklich mehrere Elemente enthält.
Aber anhand deiner bisherigen Ausführungen ist nicht wirklich ersichtlich, ob nun die Abfrage klappt und die Datenbindung nicht, oder aber andersherum. Und das bekommst du leicht durch Debuggen der entsprechenden Codestelle heraus.
das habe ich ja schon überprüft und es ist alles vorhanden, es wird nur nicht in den xamDatagrid eingebunden und so mit auch nciht angezeigt
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Im Debugger siehst Du auch ob Deine Schleife einmal oder 3 Mal durchlaufen wird.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
ja und sie wird nur einmal durchlaufen was mein Problem ist, das ich nicht weiß warum er sie nur einmal durchläuft
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Danke an alle habs hinbekommen 👍
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
So hab hier die Lösung:
Ich habe einfach nochmal es so aufgebaut wie ich es am Amfang hatte und habe dann es nochmal so gemacht wie Bernd es meinte und was vorhin nicht ging funktioniert nun.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\svn\Azubi\praktikant\Hillmer Tim\Datenbanken\prakdb.accdb");
con.Open();
var objDataTable = new DataTable();
objDataTable.Columns.Add("ID");
objDataTable.Columns.Add("Name");
objDataTable.Columns.Add("Vorname");
objDataTable.Columns.Add("Wohnort");
objDataTable.Columns.Add("Plz");
objDataTable.Columns.Add("Land");
objDataTable.Columns.Add("Telefonnummer");
objDataTable.Columns.Add("E-Mail");
objDataTable.Columns.Add("Strasse und Hausnummer");
string strSql = "SELECT * FROM Adressen";
OleDbCommand cmd = new OleDbCommand(strSql, con);
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
var objrow = objDataTable.NewRow();
objrow["id"] = dr[0];
objrow["name"] = dr[1];
objrow["vorname"] = dr[7];
objrow["wohnort"] = dr[2];
objrow["plz"] = dr[3];
objrow["land"] = dr[4];
objrow["telefonnummer"] = dr[5];
objrow["e-mail"] = dr[6];
objrow["strasse und hausnummer"] = dr[9];
objDataTable.Rows.Add(objrow);
}
dr.Close();
con.Close();
xamDataGrid1.DataSource = objDataTable.Rows;
}
private object objDataTable()
{
throw new NotImplementedException();
}
private object DataTable()
{
throw new NotImplementedException();
}
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100
Du hast jetzt also diese ganze Seite gebraucht um diesen riesigen unnötigen Kram zu implementieren, der durch dN!3L 5 Zeiler komplett 5 1/2 vor Stunden fertig gewesen wäre, nur weil Du nicht bereit warst die Grundlagen von ADO.NET vorher mal durchzulesen?
So wie dN!3L es gemacht habe habe ich es ja auch gemacht und es hat nicht funktioniert also hab ich alles nochmal aufgebaut und ja so kam der ganze unnötige kram zustande, tut mir ja leid das ich erst seit 2 Tagen mit C# programmiere.
Es gibt 10 Gruppen von Menschen, die die den Binärcode verstehen und die Anderen 01111000 01000100