У меня есть приложение ASP.NET, которое отображает различные представления большой базы данных последовательностей белков. Когда посетитель просматривает данные, я бы хотел, чтобы он мог выбрать флажок в строке GridView, чтобы отмечать последовательности для последующей загрузки в виде заархивированного текстового файла. Я не хочу сохранять выбранные варианты, поэтому они должны быть действительны только для сеанса.
Моя идея прямо сейчас - добавить TemplateField в GridView, а затем добавить к нему CheckBox. Я намереваюсь обрабатывать события проверки и сохранять идентификаторы последовательностей в состоянии сеанса. Когда пользователь переходит на страницу загрузки, я получаю данные сеанса, отображаю список последовательностей, которые они собираются загрузить, а затем отправляю файл. Очевидно, мне также придется повторно анализировать данные сеанса при каждом переключении загрузки формы / страницы.
Так что у меня есть пара вопросов по этому поводу:
1) Я слишком много работаю? Есть ли более простой способ реализовать это?
2) Являются ли все обращения к серверу за состоянием сеанса проблемой производительности? Я могу поместить кнопку «Сохранить для загрузки» на странице, чтобы пакетное решение помогло. Обработка событий проверки кажется более терпимой к ошибкам, поскольку вы не можете случайно потерять свое состояние, если уйдете.
3) Можно ли отсортировать GridView по столбцу с установленным флажком? Я хотел бы сначала отсортировать по столбцу с установленным флажком, а затем по текущему отсортированному столбцу (например, если GridView сортируется по фамилии, сортировка по столбцу проверки, а затем по фамилии).
Если это важно, я использую C#, .NET 3.5, VS2008, и я использую простой способ перетаскивания для создания GridView из таблицы SQLServerExpress.





Я не уверен, что есть более простой способ сделать это, но что касается других ваших вопросов:
2.) Вам нужно решить для себя баланс между надежностью и сетевым трафиком. Если вы используете событие проверки, вы немного вернетесь на сервер. Если вы используете другое событие (потеря фокуса на сетке, явное нажатие кнопки «обновить / сохранить» или переход на другую страницу), вы сокращаете трафик за счет возможной потери информации. Это дизайнерское решение пользовательского интерфейса, на которое нет «правильного» ответа.
3.) Это возможно, хотя может и не быть автоматическим. Я знаю, что DataGridViews будет автоматически генерировать обработчики для сортировки по столбцам флажков. Я не уверен, что с обычным GridView все так просто. Есть ли причина, по которой вы используете GV, а не DGV?
Используйте AJAX через метод страницы, чтобы отслеживать статус флажка в состоянии сеанса. Это минимизирует стоимость поездки туда и обратно.
Я не думаю, что вы сможете выполнить сортировку по флажку в GridView, поскольку вам нужно указать столбец сортировки. Вы можете сделать это, создав синтетический источник данных, который в основном объединяет сохраненную информацию о сеансе с данными из таблицы, но не с помощью SQLDataSource, подключенного непосредственно к таблице.
DataGridView - это только Windows Forms. System.Web.UI.WebControls имеет только DataGrid и GridView.