Я работаю в Visual Studio 2010 с помощью C#/ASP.NET и базы данных SQL-сервера. Я пытаюсь установить веб-сайт, который позволит менеджерам назначать сотрудников для выполнения различных задач. Проблема в том, что если два менеджера работают одновременно, неправильный сотрудник может быть назначен задаче. Список сотрудников представлен в виде сетки.Выбор неправильного элемента из-за старых данных в GridView
Проблема возникает из-за того, что один из пользователей просматривает старые данные в виде сетки.
Допустим, что первый человек загружает список и GridView выглядит следующим образом:
-Employee 1
-Employee 2
-Employee 3
-Employee 4
Затем приходит второе лицо и назначает Employee 2, который удаляет Employee 2 из списка. Фактический список теперь выглядит следующим образом:
-Employee 1
-Employee 3
-Employee 4
Но первый человек по-прежнему считает, что это потому, что их страница не обновлена:
-Employee 1
-Employee 2
-Employee 3
-Employee 4
Первый человек затем пытается назначить сотрудника 3 к задаче. Они все еще видят старый список. Когда они нажимают для выполнения задания, страница возвращается к серверу (видимо, выбор строки в элементе управления gridview является событием на стороне сервера, поэтому я не уверен, есть ли способ обходить этот http://forums.asp.net/t/1706468.aspx/1). Страница перезагружает и пытается выполнить событие postback, проверяет и видит, что элемент управления еще не действителен (поскольку привязка данных происходит после того, как событие postback должно быть обработано), поэтому я думаю, что событие postback задерживается до момента привязки данных. (Вот порядок событий на странице загрузки http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx) После того, как GridView было DataBound, данные до настоящего времени, как это:
-Employee 1
-Employee 3
-Employee 4
И тогда событие postback можно обработать. Событие postback содержит индекс строки элемента управления, который был выбран. Третья строка была выбрана, поэтому событие postback получает из сетки сотрудника 4 (Кто сейчас находится в третьей строке). Затем он использует эту информацию для получения уникального идентификатора сотрудника 4, когда нам нужен уникальный идентификатор сотрудника 3. Как мы гарантируем, что мы получим правильный идентификатор сотрудника в этой ситуации?
Проблема заключается в том, что щелчок применяется после привязки данных и изменения сетки. Я думал, что предотвращать выполнение обратной передачи страницы было бы неплохо попробовать, но операции gridview - все серверные, поэтому я не думаю, что смогу это сделать.Я не знаю способа сохранить связанные данные через postback, поэтому каждый раз, когда мы отправляем назад, мы обязаны получать новые, потенциально разные данные. Мне кажется, что я прошел через большинство вариантов, вы видите что-то не так с моими рассуждениями или какие-то предложения о новых вещах? Есть ли способ получить идентификатор сотрудника до того, как страница вернется?
Эта страница отлично работает только для одного пользователя, проблема возникает только в том случае, если несколько пользователей вносят изменения в одно и то же время.
Это именно то решение, я ищу; мы предполагаем, что пользователи будут работать с отдельными данными на данный момент. Я просто попытался включить ViewState, но все равно данные загружены. Есть ли хороший способ убедиться, что он не перезагрузится, если вы явно не расскажете об этом? Спасибо! – Sauce
Как вы загружаете данные в первую очередь? Убедитесь, что вы только вызываете привязку данных, когда 'Page.IsPostback' является ложным. Тогда не должно быть перезагрузки данных. – magnattic
Я установил DataSourceID GridView в объект ObjectDataSource, который отправляет запрос на сервер для данных. Я думаю, что это должно автоматически вызывать databind, потому что я не звоню в databind в любом месте своего кода. – Sauce