Jag har sökt och försökt förstå mig på hur man sortarar en GridView på rubriker. Ingen som försökt sig på att sortera en GridView utan att använda sig av det inbyggda Hej Gert.SortExpression i GridView
Det finns ett inbyggt i GridView "SortExpression".
Men som det verkar så fungerar det bara när man använder sig av <asp:SqlDataSource> Direkt på .aspx eller .ascx.
Hur gör man om man har en lista mListVO med rader som man vill sorterar?
jag binder min Grid med:
MatchListVO mListVO = cV.getMatchesNotFinished();
GridViewMatchNotFinished.DataSource = mListVO;
GridViewMatchNotFinished.DataBind();
Min MatchListVO innehåller:
using System.Collections;
namespace LayerVO
{
public class MatchListVO : IEnumerable
{
private readonly ArrayList MatchList;
public MatchListVO()
{
MatchList = new ArrayList();
}
public void Add(MatchVO matchVO)
{
MatchList.Add(matchVO);
}
public int Count()
{
return MatchList.Count;
}
public void Sort()
{
MatchList.Sort();
}
public MatchVO getMatch(int i)
{
return (MatchVO)MatchList[i];
}
#region IEnumerable Members
public IEnumerator GetEnumerator()
{
return MatchList.GetEnumerator();
}
#endregion
}
}
Vad mer måste man ha för att det skall fungera?
sp:n som används:
SELECT MatchId, MatchNo, REPLACE(CONVERT(VARCHAR(10), MatchDate, 111), '/', '-') AS MatchDate,
DivisionName, h.TeamName AS HomeTeamName, a.TeamName AS AwayTeamName, HallName FROM bo_Match
INNER JOIN bo_Division ON (MatchDivisionId = DivisionId)
INNER JOIN bo_Team h ON (MatchHomeTeamId = h.TeamId)
INNER JOIN bo_Team a ON (MatchAwayTeamId = a.TeamId)
INNER JOIN bo_Hall ON (MatchHallId = HallId)
WHERE (MatchDate Between '2008-07-01' AND GETDATE()) AND MatchFinished = 0
Sv: SortExpression i GridView
<asp:SqlDataSource> för att fylla en GridView?Sv:SortExpression i GridView - olika lösningar
Jo jag har sorterat en gridview bl.a med:
a) Helt manuellt i codebehinden för sidan/kontrollen
b) Använt mig av object datasource med sortering (sortexpression)
då dock inte rakt mot databas utan via Klasser som hanterar/ger mig data i form av egna objekt.
Eftersom du hämtar en samling av egna objekt...
(själv hade jag nog använt mer starkt typad data än en arraylist som innehåller objekt, tex en Generisk lista av dina objekt, eller ngn annan starkt typad kollektion)
Så kan du använda en object datasource till att sortera åt dig.
i din ODS skriva
SortParameterName="sortExpression">
så kan den automagiskt använda olika inskickade sortexpressions till en metod, väl där kan du använda olika order by om du så vill till din SP, alternativt olika SP baserat på sorteringsordning.
, äverlagrade metoder (eller optional-parameter med vb.net) liknande:
GetData()
GetData(string sortExpression)
Lite olika exempel har du på http://geekswithblogs.net/czumbano/archive/2006/03/27/73532.aspx
en helt annan aproach har du på http://musingmarc.blogspot.com/2006/02/dynamic-sorting-of-objects-using.html
Om det är lite data som hämtas kan du helt sonika sortera det/hantera det i din codebehind m.h.a en massa olika metoder (nedan ett urval)
* Egna comparers
* Använda Linq på ditt retur data
Kan återkomma senare om du har mer specifik fråga på något av de föreslagna alternativen.
// Lycka till