Zum Inhalt springen

Unterschied GriedView (ASPX/C#) und DataGridView (C#)


geloescht_Henriette

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

post-57428-14430448271587_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :D

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...