Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.