Gridview и просмотренные товары - PullRequest
0 голосов
/ 06 июня 2009

У меня есть вид сетки (вид сетки DXperience), который я хотел бы отобразить, если пользователь уже щелкнул ссылку в этой строке. Ссылка в каждой строке отправляет пользователя на страницу, где отображается более подробная информация об элементе. Чтобы символизировать это, я подумал, например, сделать фон посещенных строк другим цветом.

У меня вопрос, какой самый простой и эффективный способ сделать это?

Моя идея: Поскольку системы входа в систему нет, я думал о сохранении идентификаторов элементов в файле cookie, разделенном запятой, и при рендеринге строк я буду искать в файле cookie, чтобы увидеть, просматривался ли этот элемент.

Меня беспокоит то, насколько медленно это сделает просмотр сетки. Я обычно отображаю несколько тысяч строк, и если пользователь щелкнул, возможно, по 40 элементам, потребуется время, чтобы просмотреть 40 элементов в каждой строке, чтобы проверить, просматривается ли он уже. Это действительная проблема, и если да, то как я могу ее оптимизировать?

1 Ответ

0 голосов
/ 06 июня 2009

Есть несколько способов сделать это. Использование файла cookie - это один из допустимых способов, хотя он, вероятно, не разрешит чистое использование: посещения.

Этот человек изменил адрес при привязке, поэтому он соответствует уникальному идентификатору. ссылка У них была проблема с окраской в ​​IE7; Я подозреваю, что это потому, что они должны были использовать якорь (#).

Обновление

В зависимости от вашей ситуации вы можете попробовать передать список идентификаторов строк в литерал:

var visitedSites = <asp:Literal />;

Передайте массив JS, и вы сможете пройти через него и установить цвета строк таким образом. Это не особенно накладные расходы, по крайней мере, пока вы не пройдете несколько сотен посещенных ссылок.

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

function gridLinks_OnRowDataBound (...) {
    if (visited.Contains(e.Row.DataItem["field"]))
    //Set color
}

(Я работаю из памяти и не использую C # на работе, но вы поймете общую идею.)

...