ASP.net Gridview выделяет максимальные значения в нескольких столбцах - PullRequest
4 голосов
/ 29 марта 2011

У меня есть сетка, которая показывает, например, статистику бейсбольной команды. Это стандартная таблица спортивной статистики - строки показывают статистику для каждого игрока, а столбцы показывают конкретную статистику для каждого игрока.

Пока все достаточно просто. Но то, что я затем хотел бы сделать, это стиль (выделите или выделите жирным шрифтом) Max или Min (лидер команды) каждого столбца статистики. Например, игрок A может вести только в одной или двух категориях, поэтому мы не можем стилизовать всю строку. Если игрок А просто возглавляет команду в аутах, я просто хочу определить количество его аутов (ТОЛЬКО в ячейке).

Какой лучший способ справиться с этим? Сделайте так, чтобы SQL Server выполнял всю работу, и по сути оцените КАЖДУЮ статистику каждого игрока, эффективно удваивая количество столбцов (например, col: AB, col: ABRank). Или я позволю событию, связанному с rowdatabound gridview, обработать это?

Если бы я выбрал последнее, я думаю, что я получил бы Макс каждой статистической категории из таблицы данных до привязки (например, сохранить их в локальной переменной), а затем на границе строки данных, если они соответствуют значению, применить стиль.

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Есть вариант, который вы не упомянули.Вы можете использовать Javascript на стороне клиента, чтобы выделить.должно быть довольно просто запустить таблицу, выделив самые высокие значения в столбце.

2 голосов
/ 30 марта 2011

В зависимости от того, что вы делаете, у вас, вероятно, есть определенное количество столбцов, к которым вы привязываетесь.

Я бы использовал LINQ на вашем DataSource, прежде чем связывать его, для каждого типа, который вы хотите максимум, например:

// 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, чтобы вы определяли проверки специально для элемента управления, чтобы вам не приходилось искать элементы управления в строке.

2 голосов
/ 30 марта 2011

Вы уже дали ответ на свой вопрос, который, кстати, я и дал бы вам.

Или я позволю событию, связанному с строкой строки, в представлении таблицы это обработать?

Если бы я выбрал последнее, я думаю, что я бы получил Макс каждой статистической категории из таблицы данных до привязки (например, сохранить их в локальной переменной), а затем на границе строки данных, если они соответствуют значению, применить стиль.

...