geloescht_Henriette Geschrieben 25. März 2009 Teilen Geschrieben 25. März 2009 Kann mir jemand erklären wo der Unterschied zwischen GridView (ASPX) und DataGridView (C#) liegt? Ich habe eine Webseite gemacht (C#), wo ich eine XML-Datei in eine GridView ausgebe. Ohne Probleme. Das ganze wollte ich nun für einer Windows Applikation umschreiben. Hierfür benutze ich das DataGridView. Die Daten bekomme ich zwar angezeigt. Aber als zusätzliche Spalten zu meinen bestehenden Spalten. Das Problem hatte ich damals auch auf meiner Webseite. Dort musste ich der GridView noch folgendes mitgeben damit das ganze funktioniert: AutoGenerateColumns="false" Nun habe ich äquvalent dazu in meinem neuen Programm folgendes angegeben: dgv.AutoGenerateColumns = true; Hier funktioniert das ganze aber komischerweise nicht. Meine zusätzlichen Spalten mit den Ergebnissen werden zwar, wie bei der ASPX-Version, ausgeblendet aber die ursprünglichen werden nicht mit den Daten gefüllt. Wo liegt also der Unterschied? Bei beiden Versionen erstelle ich eine DataTable, die dazugehörige DataColumn und die DataRow. Danach weise ich die DataTable dem GridView bzw. DataGridView zu. ASPX / C#: dgv.DataSource = ConvertNodeListToDataTable(elemList); //gibt ein DataTable zurück dgv.DataBind(); Applikation / C#: DataTable dt = new DataTable(); ... dgv.DataSource = dt; Ein DataBind gibt es für DataGridView nicht. Ich weis, dass es einen einfacheren Weg gibt mit: DataSet ds = new DataSet("DataSet"); ds = xmlDatadoc.DataSet; dgv.DataSource = ds.DefaultViewManager; dgv.DataMember = "knotenXY"; Doch damit kann ich leider nicht arbeiten. Wenn nämlich Knoten fehlen (was manchmal vorkommen kann), wird die entsprechende Spalte gar nicht angeziegt. Und dann ist meine gewünschte feste Tabellenstruktur falsch. Daher der Umweg über DataTable und das füllen der leeren Knoten mit Space. Viele Grüße Henriette Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 25. März 2009 Teilen Geschrieben 25. März 2009 Du musst deinen Spalten im grid schon sagen aus welcher Spalte der Datenquelle sie ihre Daten nehmen sollen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Henriette Geschrieben 26. März 2009 Autor Teilen Geschrieben 26. März 2009 Du musst deinen Spalten im grid schon sagen aus welcher Spalte der Datenquelle sie ihre Daten nehmen sollen Hallo Guybrush Threepwood Ich glaube ich stehe auf dem Schlauch… Oder ich sehe den Wald vor lauter Bäumen nicht mehr... Wo soll ich dem Grid sagen, außer welcher Spalte Sie kommen? Unter ASPX musste ich nichts machen. dgv.DataSource = ConvertNodeListToDataTable(elemList); ... DataTable ConvertNodeListToDataTable(XmlNodeList xnl) { DataTable dt = new DataTable(); try { //Spalten hinzufuegen string[,] col = new string[,] {{"col_1",dgv.Columns[0].HeaderText}, {"col_2",dgv.Columns[1].HeaderText}, {"col_3",dgv.Columns[2].HeaderText}, {"col_4",dgv.Columns[3].HeaderText}, {"col_5",dgv.Columns[4].HeaderText}, {"col_6",dgv.Columns[5].HeaderText}, {"col_7",dgv.Columns[6].HeaderText}, {"col_8",dgv.Columns[7].HeaderText}, {"col_9",dgv.Columns[8].HeaderText}, {"col_10",dgv.Columns[9].HeaderText}, {"col_11",dgv.Columns[10].HeaderText}, {"col_12",dgv.Columns[11].HeaderText}, {"col_13",dgv.Columns[12].HeaderText}, {"col_14",dgv.Columns[13].HeaderText}, {"col_15",dgv.Columns[14].HeaderText}}; for (int i = 0; i < (col.Length/2); i++) //-> '/2', wg. array { DataColumn dc = new DataColumn(col[i,1], System.Type.GetType("System.String")); dt.Columns.Add(dc); } //Zeilen hinzufuegen int ColumnsCount = dt.Columns.Count; for (int i = 0; i < xnl.Count; i++) //Anzahl Knoten durchgehen { DataRow dr = dt.NewRow(); for (int j = 0; j < ColumnsCount; j++) { XmlNode bookNode = xnl.Item(i).SelectSingleNode(col[j,0]); if (!(bookNode == null)) { String chk = bookNode.InnerText; ; dr[j] = chk; } else { dr[j] = " "; } } dt.Rows.Add(dr); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Exception"); } return dt; } Das DataGridView mit den dazugehörigen Spalten habe ich mit dem Assistenten des VS2008 erstellt. Dort konnte ich nichts angeben. Aber in meiner DataTable sind die Spaltennamen ja gleich. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 26. März 2009 Teilen Geschrieben 26. März 2009 Auch in ASP musst du das machen. Woher soll die Spalte denn sonst auch wissen woher sie ihre Daten nehmen soll? Nur weil sie zufällig die Selbe Überschrift hat wie eine Spalte in der Datenquelle? Das klappt ja schon dann nicht mehr wenn es lokalisiert wird. Beim DataGridView ist das die DataPropertyName Eigenschaft der Column Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_Henriette Geschrieben 26. März 2009 Autor Teilen Geschrieben 26. März 2009 Auch in ASP musst du das machen. Woher soll die Spalte denn sonst auch wissen woher sie ihre Daten nehmen soll? Nur weil sie zufällig die Selbe Überschrift hat wie eine Spalte in der Datenquelle? Das klappt ja schon dann nicht mehr wenn es lokalisiert wird. Beim DataGridView ist das die DataPropertyName Eigenschaft der Column "DataPropertyName"... man bin ich blind... :upps Danke. Jetzt funktioniert es. (Hatte ich bei der aspx-Version doch auch gemacht. Nur zu Fuß. Hmm.. Einfach nur den Code zusammenklicken ist wirklich nicht so toll. Jetzt weiß ich wieder warum ich lieber echten Code tippe.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.