2011-03-29 68 views
4

我有一個gridview,顯示例如棒球隊的統計數據。這是一個標準的體育狀態網格 - 每行顯示統計數據,列顯示每個玩家的具體統計數據。ASP.net Gridview突出顯示多列中的最大值

到目前爲止還不夠容易。但是我想要做的是風格(突出或粗體)的每個 stat列的Max或Min(團隊領導)。例如,玩家A只能在一個或兩個類別中領先,因此我們無法設計整個行的樣式。如果球員A只是在三振出局中領先球隊,我只想對他所擁有的三振球數量進行設計(僅限於這個單元格)。

處理這個問題的最佳方法是什麼?讓SQL Server完成所有的工作,並且有效地對每個玩家的每個屬性進行排名,從而有效地將列數加倍(例如col:AB,col:ABRank)。或者我讓GridView的rowdatabound事件處理這個?

如果我選擇後者,我想我會在綁定之前從數據表中獲取每個統計類別的最大值(例如,將它們存儲在本地變量中),然後在rowdatabound中,如果它們匹配值,則應用樣式。

回答

2

你已經給出了你自己的問題的答案,這是我給你的答案。

或者我讓rowdatabound事件的 gridview處理這個?

如果我選擇了後者,我認爲 結合之前,我會 得到的數據表中的每個統計 類別的最高(例如,將它們存儲在本地 變量)然後的RowDataBound,如果 它們匹配的價值,應用風格。

+0

那麼因爲在Stack中有這麼多偉大的思想,我想有人有一個更好的主意。 – IMAbev 2011-03-30 01:58:34

2

有一個選項,你沒有提到。你可以使用JavaScript客戶端來突出顯示。應該比較簡單地在表格上運行,突出顯示列中的最高值。

+0

好點賈斯汀。我想我可能會用我的新玩具jQuery去做。 – IMAbev 2011-03-30 02:01:02

2

根據你在做什麼,你可能有一定數量的列綁定到。

我會使用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所以您正在將檢查專門針對控件進行範圍檢查,因此您無需在一行中搜索控件。

+0

感覺Kelsey - 絕對是一個不錯的選擇,儘管LINQ不在我的詞彙量中。 – IMAbev 2011-03-30 01:59:57