J'ai une GridView liée à un ObjectDataSource en utilisant la pagination. La pagination fonctionne correctement, sauf que l'ordre de tri change en fonction de la page du résultat affichée. Cela entraîne la réapparition des éléments sur les pages suivantes parmi d'autres problèmes. J'ai tracé le problème à mon DAL, qui lit une page à la fois et le trie ensuite. Évidemment, le tri va changer à mesure que la taille de l'ensemble de résultats change. Y a-t-il une amélioration à cet algorithme? Je voudrais utiliser un lecteur de données si possible:Problème: Tri pour les modifications GridView/ObjectDataSource en fonction de la page
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
public static WordsCollection LoadForCriteria(string sqlCriteria, int maximumRows, int startRowIndex, string sortExpression)
{
//DEFAULT SORT EXPRESSION
if (string.IsNullOrEmpty(sortExpression)) sortExpression = "OrderBy";
//CREATE THE DYNAMIC SQL TO LOAD OBJECT
StringBuilder selectQuery = new StringBuilder();
selectQuery.Append("SELECT");
if (maximumRows > 0) selectQuery.Append(" TOP " + (startRowIndex + maximumRows).ToString());
selectQuery.Append(" " + Words.GetColumnNames(string.Empty));
selectQuery.Append(" FROM sw_Words");
string whereClause = string.IsNullOrEmpty(sqlCriteria) ? string.Empty : " WHERE " + sqlCriteria;
selectQuery.Append(whereClause);
selectQuery.Append(" ORDER BY " + sortExpression);
Database database = Token.Instance.Database;
DbCommand selectCommand = database.GetSqlStringCommand(selectQuery.ToString());
//EXECUTE THE COMMAND
WordsCollection results = new WordsCollection();
int thisIndex = 0;
int rowCount = 0;
using (IDataReader dr = database.ExecuteReader(selectCommand))
{
while (dr.Read() && ((maximumRows < 1) || (rowCount < maximumRows)))
{
if (thisIndex >= startRowIndex)
{
Words varWords = new Words();
Words.LoadDataReader(varWords, dr);
results.Add(varWords);
rowCount++;
}
thisIndex++;
}
dr.Close();
}
return results;
}