Laden...

DataGridView: Inhalt aus DB in die richtigen Spalten eintragen

Erstellt von muecke vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.567 Views
muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren
DataGridView: Inhalt aus DB in die richtigen Spalten eintragen

Hallo Leute,
ich sitze nun schon seid längerer zeit an dem Problem und komme einfach nicht weiter, auch nicht nach unzähligen Google versuchen.

Problemstellung:
Ich habe ein datagridview namens "dataGridView" mit vordefinierten Spalten
wie "Name", "Typ", "Nation" usw.
nun möchte ich den Inhalt aus meiner Datenbank (den ich erfolgreich bekomme durch dr[0] für Name, dr[1] für Typ usw) in mein Datagrid in die richtigen Spalten eintragen.

Ich habe es versucht so zu machen, da ich nicht mit einem Dataset arbeite:


DataGridViewRow dgvRow = new DataGridViewRow();
                DataGridViewCell dgvCell = new DataGridCell();

                dgvCell = new DataGridViewTextBoxCell();
                dgvCell.Value = dr[0].ToString();
                dgvRow.Cells.Add(dgvCell);

nun bringt es mir aber den Fehler bei new DataGridCell(); :

Fehler 1 Eine implizite Konvertierung vom Typ "System.Windows.Forms.DataGridCell" in "System.Windows.Forms.DataGridViewCell" ist nicht möglich. C:\Users\Muecke\Desktop\Navyfield\NFManager\Form1.cs 53 44 NFManager

Ich hoffe mir kann hier einer behilflich sein dass ich mein DataGrid befüllen kann.
LG Mücke

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

DataGridViewCell dgvCell = new DataGridViewCell();

mfG Gü

Edit: falsch war DataViewGridCell, wurde korrigiert

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

wenn ich das mache bringt er mir diese Fehlermeldung:

Fehler 1 Der Typ- oder Namespacename "DataViewGridCell" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Muecke\Desktop\Navyfield\NFManager\Form1.cs 53 48 NFManager

Welchen Verweis muss ich in meinem Code nun noch hinzufügen?

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

K
62 Beiträge seit 2009
vor 14 Jahren

Einfach auf etwaige "Verschreiber" deines Vorposters achten, und es nicht per Copy&Paste übernehmen 😉

muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

Wenn ich aus DataViewGridCell() das hier mache: DataGridViewCell();
dann kommt folgende Fehlermeldung:

Fehler 1 Es konnte keine Instanz der abstrakten Klasse oder Schnittstelle "System.Windows.Forms.DataGridViewCell" erstellt werden. C:\Users\Muecke\Desktop\Navyfield\NFManager\Form1.cs 55 44 NFManager

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

276 Beiträge seit 2007
vor 14 Jahren

Verstehe ich das richtig, dass es lediglich um eine Anzeige von Daten einer Tabelle in einem DGV geht?

wieso machst du nicht einfach ganz normal mit datasource, databind und im aspx code hast du die Boundfields, die du anzeigen möchtest...!

Versteh ich was falsch?

Gruß

nitro

muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

ja verstehst du richtig, aber ich möchte das trotzdem so machen um das zu lernen.

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

276 Beiträge seit 2007
vor 14 Jahren

Naja, also ich würds einfach mal so probieren:

deine Tabelle als Datasource:


GridView1.DataSource = MyTable.DefaultView;
GridView1.DataBind();

dann im aspx Code:


<asp:GridView ID="GridView1"...>
...
<Columns>
<asp:BoundField DataField="DataBaseTableColumnName" HeaderText="HierstehtmeinSpaltenHeader" />
</Columns>
</asp:GridView>

Ansonsten mach dir doch ein DataTable, füge in das ROws ein, in die Rows SPalten und dann kannst du sie füllen, wie du das schon mit dt[0] und so weiter machst, danach auch wieder

MyGridView = MyDataTable.DefaultView;

Siehe DataTable-Klasse

K
62 Beiträge seit 2009
vor 14 Jahren

Wenn ich aus DataViewGridCell() das hier mache: DataGridViewCell();
dann kommt folgende Fehlermeldung:

Fehler 1 Es konnte keine Instanz der abstrakten Klasse oder Schnittstelle "System.Windows.Forms.DataGridViewCell" erstellt werden. C:\Users\Muecke\Desktop\Navyfield\NFManager\Form1.cs 55 44 NFManager

Oh, etwas voreilig gepostet X(

Wie Nitro schon sagt, wäre die beste Möglichkeit es direkt über eine Datasource zu machen, aber wenn du die Zeilen unbedingt selbst erzeugen willst, ist dein erster Ansatz nicht so verkehrt...


DataGridViewRow dgvRow = new DataGridViewRow();
DataGridViewCell dgvCell = new DataGridViewTextBoxCell();

dgvCell.Value = dr[0].ToString();
dgvRow.Cells.Add(dgvCell);

datagridview.Rows.Add(dgvRow);

So sollte es funktionieren, wenn die entsprechenden Spalten im DataGrid vorhanden sind, ansonsten müsstest Du diese vorher noch entsprechend hinzufügen


dataGridView.Columns.Add(new DataGridViewColumn(new DataGridViewTextBoxCell()));

Dennoch würde ich auch eher über die Verwendung einer Datasource nachdenken, kompakter, übersichtlicher und was noch alles 😉

6.911 Beiträge seit 2009
vor 14 Jahren

Sorry, hab schlampig gelesen.

Dem DataGridView können nur Zeilen (DataGridViewRow) und Spalten (DataGridViewColumn) hinzugefügt weden. Die Zellen (DataGridViewCell) können dann per Indizes geholt werden. ZB

DataGridViewCell dc = dataGridView1[columnIndex, rowIndex];

Explizites erstellen von DataGridViewCells geht nicht!

@Nitro2k7: aspx wird nicht gemeint sein da es eine Frage im GUI: Windows-Form Forum ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

Dankeschön für die hilfe, nun funktioniert es.

ich werde das hier ersteinmal vertiefen und gegen später wenn ich diese methode daten im Datagrid anzeigen kann einen schritt weiter gehen und das über datasource machen.

Vielen Dank nochmal für die Hilfe

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

276 Beiträge seit 2007
vor 14 Jahren

@Nitro2k7: aspx wird nicht gemeint sein da es eine Frage im GUI: Windows-Form Forum ist.

UPS...mein Fehler...Tut mir leid^^

6.911 Beiträge seit 2009
vor 14 Jahren

Datagrid

Du meinst wohl DataGridView. Das sind zwei unterschiedliche Steuerelemente. Das DataGrid ist das Alte und das DataGridView das Neue (einfach ausgedrückt).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

muecke Themenstarter:in
15 Beiträge seit 2009
vor 14 Jahren

ohhhja sry ich meinte das DataGridView xD
mein Fehler 😛

Religionskriege sind Konflikte zwischen erwachsenen Menschen,
bei denen es darum geht, wer den cooleren, imaginären Freund hat

J
3.331 Beiträge seit 2006
vor 14 Jahren

Hallo,

das ist ja schon mal geklärt: immer die genauen Bezeichnungen verwenden, damit es keinerlei Missverständnisse gibt: DataGridView, Da ta Gr id, Gr id Vi ew, Da ta Vi ew usw. (Leerzeichen habe ich bewusst eingefügt, damit die falschen Begriffe in der Forumssuche übergangen werden.)

ich werde das hier ersteinmal vertiefen und gegen später wenn ich diese methode daten im Datagrid anzeigen kann einen schritt weiter gehen und das über datasource machen.

Ich bin aber der Meinung, dass es grundsätzlich falsch ist, Daten manuell in ein **DataGridView **einzutragen. Wie schon der Name sagt, dient es dazu, Daten in ein Grid zur Ansicht bereitzustellen. Also ist von vornherein eine Datenmenge zu benutzen, die über **DataSource **angebunden wird. Alles andere führt eher früher als später zu schwachsinnigen Umwegen und neuen Problemen, die beim richtigen Weg überhaupt nicht entstehen.

Deshalb ist auch dein Weg über DataReader falsch: der passt, wenn du einzelne Zeilen brauchst, aber nicht, wenn das Ziel eine vollständige Datenmenge ist. Dann passt **DbDataAdapter **erheblich besser.

Zum richtigen Weg siehe 🛈 Kap.25 ff.

Gruß Jürgen

Hallo Günther und willkommen hier!

49.485 Beiträge seit 2005
vor 14 Jahren