Et site med kursusmaterialer, der bruges i forbindelse med undervisning i forskellige it relaterede emnerEn skøn grafik du kan nyde mens der undervises.
   

Send spørgsmål eller kommentar til Thor - klik her: Send en kommentar til Thor - omkring undervisning eller kursus  Søg i kursusmaterialerne. Kan bruges i forbindelse med undervisningen eller efter kurset  Til forsiden af kursusmaterialer.dk 

 

ASP.NET II / Dataset og datagrid objektet / Sortering Tag dig ikke af dette flag - det er bare en besked til underviseren om, at der er undervisernote knyttet til ASP.NET II kursus, Dataset og datagrid objektet, Sortering


ASP.NET fjernundervisningskursus

- Vil du gerne på kursus NU?

- Vil du gerne lære i dit eget tempo?

- Har du ikke tid til at tage på kursus ude i byen?

Så køb et kursus i ASP.NET som fjernundervisning på www.it-fjernundervisning.dk


Sortering

Læs mere fra side 349 i bogen

Vi bruger DataView objektet til at klare sorteringen - du kan læse mere om dataview objektet på side 386 i bogen

Igen er der en række ting vi skal lave for at få det til at virke

  • Sorting skal sættes til true på vores datagrid (det skulle være til at finde ud af:-))
  • Vi skal give besked om hvilken routine der skal kaldes ved sortering - det kan igen gøres pr. håndkraft, eller gennem hændelsesstyringen. Kommandoen skulle være til at gætte:
  • onSortCommand="DoSort"
  • Og endelig skal vi have skrevet selve routinen. Læg mærke til at vi bruger en viewstate variabel til at holde sorteringen fra runde til runde

 

Der er sket ændringer i DoDatabind routinen, tilføjet en variabel i toppen og skrevet en eventhandler.

VB.NET

Dim strSortOrder As String
    Private Sub dgridAndeby_SortCommand(ByVal ...
        strSortOrder = e.SortExpression.ToString()
        ViewState("SortOrder") = strSortOrder
        DoDatabind()
    End Sub
    Private Sub DoDatabind()
Dim dsetAndeby As New Dataset()
        dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"))
        Dim objDataView As DataView
        strSortOrder = ViewState("SortOrder")
        objDataView = dsetAndeby.Tables(0).DefaultView
        objDataView.Sort = strSortOrder
        dgridAndeby.DataSource = objDataView
        dgridAndeby.DataBind()
    End Sub

C#

namespace Udviklingcsharp.ASP.NET_II_kursus
{
 public class _3_sortering : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid dgridAndeby;
  DataSet dsetAndeby = new DataSet();
  String strSortOrder = "";
  private void Page_Load(object sender, System.EventArgs e)
  {
if (!IsPostback) {
   ViewState["SortOrder"] = "";
    DoDatabind();
}
  }
  
  private void DoSort(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
  {
   strSortOrder = e.SortExpression.ToString();
   ViewState["SortOrder"] = strSortOrder;
   DoDatabind();
  }
  private void DoDatabind()
  {
DataSet dsetAndeby = new DataSet();
   dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"));
   DataView objDataView;
   strSortOrder = ViewState["SortOrder"].ToString();
   objDataView = dsetAndeby.Tables[0].DefaultView;
   objDataView.Sort = strSortOrder;
   dgridAndeby.DataSource = objDataView;
   dgridAndeby.DataBind();
  }
 }
}

Som vi har implementeret løsningen her sorterer den automatisk kolonnerne faldende. Man kan styre sorteringsrækkefølgen ved at tilføje et ASC eller et DESC i enden af strSortOrder, men skal man lave et datagrid, der sorterer korrekt både op og ned og på flere kolonner skal man nok sætte en enkelt eftermiddag af til det. Det er ikke kodemæssigt svært, men man skal lige tænke logikken igennem inden man går igang.

Sortering af datoer er altid en udfordring. Mange års erfaring har lært mig, at man altid skal gemme datoer i yyyy-mm-dd formatet - så virker sortering umiddelbart. I et datagrid kan man så, hvis man snor sig lidt, skifte formateringen med teksten {0:d} i dataformatting expression på den kolonne datoen står i (man skal jo have overbevist datagrid'et om, at det faktisk er en dato).

String.Format("{0:d}", Convert.ToDateTime(Container.DataItem("Foedselsdato")))

Brug hellere tiden på at kigge lidt på den RowFilter metode, som dataview objektet også har - det giver nogle interessante muligheder.


Opgave

  • Prøv det...
  • Dataview objektet har også en RowFilter metode, der kan filtrere et dataset i forbindelse med visningen.
    Prøv at bygge en side, hvor man kan indtaste en filtreringstekst der filtrerer informationerne - f.eks. på kundenavnet. (Læs evt. side 346 i bogen)
   
Spacer Spacer Spacer Spacer