Zum Inhalt springen

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


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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

Geschrieben

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

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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