ASP.net Gridview突出显示多列中的最大值

时间:2011-03-29 19:53:59

标签: asp.net sql-server gridview max rowdatabound

我有一个gridview,可以显示棒球队的统计数据。这是一个标准的体育统计网格 - 行显示每个玩家的统计数据,列显示每个玩家的特定统计数据。

到目前为止很容易。但我想要做的是每个 stat列的Max或Min(团队领导)的样式(突出显示或加粗)。例如,玩家A可能只引导一个或两个类别,因此我们无法设置整个行的样式。如果球员A只是在三振出局中领先球队,我只想设定他所拥有的三振出局次数(仅限该单位)。

处理此问题的最佳方法是什么?使SQL Server完成所有工作并生效,对每个播放器的每个统计数据进行排名,有效地使列数加倍(例如col:AB,col:ABRank)。或者我让gridview的rowdatabound事件处理这个?

如果我选择后者,我想我会在绑定之前从数据表中获取每个统计类别的Max(例如将它们存储在局部变量中)然后在rowdatabound上,如果它们匹配值,则应用样式。

3 个答案:

答案 0 :(得分:2)

你已经回答了自己的问题,这就是我给你的答案。

  

或者我是否允许rowdatabound事件   gridview处理这个吗?

     

如果我选择了后者,我想我会的   得到每个统计的最大值   以前数据表中的类别   绑定(例如将它们存储在本地   变量)然后在rowdatabound上,如果   他们匹配价值,应用风格。

答案 1 :(得分:2)

你没有提到一个选项。您可以使用javascript客户端进行突出显示。在表格上运行应该相当简单,突出显示列中的最高值。

答案 2 :(得分:2)

根据您的操作,您可能会绑定一定数量的列。

在绑定之前,我会在你的DataSource上使用LINQ,对于你想要最大的每种类型,例如:

// 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";
}

我不会使用RowDataBinding,在控制级别OnDataBinding执行此操作,因此您将检查专门用于控件,因此您不必搜索行上的控件。