|
|||||
|
Velkommen IntroASP.NET og XML IntroduktionXML CSS XSL(T) DTD og Schemas DOM og SAX Værktøjer XML i datagrid XML - skrivning af XML XML og transformationer XML - udtræk af elementer Dataset og datagrid objektet Indlæsning af dataPaging Sortering Ret post Slet post Opret ny post Hyperlinks i datagrid Billeder i datagrid Vælg post i datagrid Cache Et eksempel med det hele Datagrid, database og datasetDataset - extra CloneMerge Relationer Class Hvordan gør manAndeby klassen i vb Andeby klassen i c-sharp Webservices IndledningEtablering af en web-service Kald af web-services Sikkerhed ModellerBrug af forms modellen Opret cookie selv File upload Optimering Hvad kan man gøreMere om caching Fejlsøgning TracingFejlhaandtering De andre fejl Et lille CMS Basis infoVis side Ret side Styr sider Pæn URL Et demo system Kalender kontrollen Et lille kodeeksempel |
ASP.NET II / 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 |
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
onSortCommand="DoSort"
Der er sket ændringer i DoDatabind routinen, tilføjet en variabel i toppen og skrevet en eventhandler.
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
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.