ASP.net Gridview met en évidence les valeurs maximales dans plusieurs colonnes

J'ai un gridview qui montre, par exemple, les statistics d'une équipe de baseball. C'est une grid de statistics de sport standard – les lignes montrent des statistics pour chaque joueur et les colonnes montrent la statistique spécifique pour chaque joueur.

Assez facile jusqu'ici. Mais ce que je voudrais alors faire est de style (surligner ou gras) le Max ou le Min (le chef d'équipe) de chaque colonne stat. Par exemple, le joueur A peut seulement mener dans une ou deux catégories, ainsi nous ne pouvons pas styler la rangée entière. Si le joueur A mène juste l'équipe dans des retraits sur des sockets, je veux juste styler le nombre de retraits au bâton qu'il a eu (CETTE cellule seulement).

Quelle est la meilleure façon de gérer cela? Faites en sorte que SQL Server fasse tout le travail et en effet, classr CHAQUE stat de chaque joueur, en doublant effectivement le nombre de colonnes (par exemple col: AB, col: ABRank). Ou est-ce que je laisse l'événement rowdatabound de gridview gérer cela?

Si je choisissais ce dernier, je pense que j'obtiendrais la Max de chaque catégorie statistique de la datatable avant de la lier (par exemple les stocker dans une variable locale) puis sur rowdatabound, s'ils correspondent à la valeur, appliquer le style.

Vous avez déjà donné la réponse à votre propre question, qui est d'ailleurs la réponse que je vous aurais donnée.

Ou est-ce que je laisse l'événement rowdatabound de gridview gérer cela?

Si je choisissais ce dernier, je pense que j'obtiendrais la Max de chaque catégorie statistique de la datatable avant de la lier (par exemple les stocker dans une variable locale) puis sur rowdatabound, s'ils correspondent à la valeur, appliquer le style.

Il y a une option que vous n'avez pas mentionnée. Vous pouvez utiliser javascript clientide pour faire la surbrillance. devrait être plutôt simple de courir sur une table am mettre en évidence les valeurs les plus élevées dans une colonne.

En fonction de ce que vous faites, vous avez probablement une certaine quantité de colonnes auxquelles vous vous liez.

J'utiliserais LINQ sur votre DataSource, avant de le lier, pour chaque type que vous voulez le max par exemple:

// create a global variable to hold the data int _maxHomeRuns = 0; // Then before you bind the datasource, find out the max of each stat _maxHomeRuns = baseballStats.Max(i => i.HomeRuns); // get the max // Then in your template columns Label control DataBinding method if ((int)(Eval("HomeRuns")) == _maxHomeRuns) { // Assign the style you want ((Label)(sender)).CssClass = "MaxCellStyle"; } 

Je n'utiliserais pas le RowDataBinding , faites-le au niveau OnDataBinding du niveau de contrôle, de sorte que vous OnDataBinding les controls spécifiquement à un contrôle afin que vous n'ayez pas à searchr des controls sur une ligne.