Laden...

DataTable sortieren ?

Erstellt von s0h0 vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.061 Views
S
s0h0 Themenstarter:in
683 Beiträge seit 2006
vor 15 Jahren
DataTable sortieren ?

hallo,

hat jemand eine Ahnung warum der DataTable bzw. das View nicht sortiert wird,
obwohl es so in MSDN steht?

danke

 
//Abfrage der Daten von Webservice
TLocationSet set = dev.SearchLocationSet(critSet, maxres, string.Empty);

//Die Daten aus der Webservice Abfrage einem DataTable hinzufügen...
        DataTable table = new DataTable("mytable");
        table.Columns.Add("Text");
        table.Columns.Add("Value");
        foreach (IDeviceRef.TLocation loc in set.mLocationArray)
        {
            DataRow dr = null;
            object[] rowArray = new object[2];
            rowArray[0] = loc.mLocationName.ToString() + " " + loc.mStreet.ToString();
            rowArray[1] = loc.mLocationID.ToString();
            dr = table.NewRow();
            dr.ItemArray = rowArray;
            table.Rows.Add(dr);
        }

// Hier sollte sortiert werden....
        DataView DV = new DataView(table, null, "Text DESC", DataViewRowState.CurrentRows);


//Sortierten Table in DropDownlist einfügen...
        foreach (DataRow loc in DV.Table.Rows)
        {
            ddList.Items.Add(new ListItem(loc.ItemArray[0].ToString(), loc.ItemArray[1].ToString()));
        }

Eine Null kann ein bestehendes Problem verzehnfachen

B
114 Beiträge seit 2007
vor 15 Jahren

In der MSDN steht aber auch zu der Property Table:

Gets or sets the source DataTable.

DataView implementiert IEnumerable. Vielleicht hilft dir das weiter.

S
s0h0 Themenstarter:in
683 Beiträge seit 2006
vor 15 Jahren

hmm nicht wirklich. ienumerable heisst doch nur dass er auf die spalten und so per name zugreifen kann, oder? und das geht ja normal beim tabel sowieso...

Edit: Also das schluckt er jedenfalls nicht...


   DataView DV = new DataView(table.AsEnumerable(), null, "Text DESC", DataViewRowState.CurrentRows);

Eine Null kann ein bestehendes Problem verzehnfachen

B
114 Beiträge seit 2007
vor 15 Jahren

Was, nein !
Das macht doch garkeinen Sinn.
Ich hab gesagt, dass DataView IEnumerable implementiert.
Eine foreach-Schleife baut auf diesem Interface auf.
Man kann also mit foreach über das DataView-Objekt gehen und dort bekommt man auch die sortierten, gefilterten Zeilen.

S
s0h0 Themenstarter:in
683 Beiträge seit 2006
vor 15 Jahren

aber das mach ich hier doch, oder?

 
DataView DV = new DataView(table, null, "Text DESC", DataViewRowState.CurrentRows);


//Sortierten Table in DropDownlist einfügen...
        foreach (DataRow loc in DV.Table.Rows)
        {
            ddList.Items.Add(new ListItem(loc.ItemArray[0].ToString(), loc.ItemArray[1].ToString()));
        }

Eine Null kann ein bestehendes Problem verzehnfachen

F
10.010 Beiträge seit 2004
vor 15 Jahren

Nein, du gehst über die Unsortierte Tabelle, an die das DataView gebunden ist.

Und falls das ein DropDownj ist, solltest Du evtl mal etwas zu DataBinding lesen.

S
s0h0 Themenstarter:in
683 Beiträge seit 2006
vor 15 Jahren

hmm ok.
weiss zwar no net wie ich daten vom dataview auslesen kann ohne einen bestimmten table darin anzusdsprechen... aber mim databinding hast du recht, könnt die tabele ja auch direkt an die datasourcxe uebergeben, den code habe ich aber uebernommen und so wird es in zeehn oder mehr faellen bereits gemacht.

danke

Eine Null kann ein bestehendes Problem verzehnfachen

F
10.010 Beiträge seit 2004
vor 15 Jahren

Du solltest mal ein grundlagenartikel zu ADO.NET lesen, dann wird dir evtl einiges Klarer.

Den DataView Durchiterieren:


foreach (DataRowView loc in DV)
        {
            ddList.Items.Add(new ListItem(loc[0].ToString(), loc[1].ToString()));
        }

Und natürlich kannst du diese unnötige fehleranfällige Art die Daten zu binden
lassen, aber bei 10-20 Stellen ist das doch kein thema, da dauert das schreiben
und/oder lesen eines Postings doch schon länger.