我正在使用C#/ ASP.NET和SQL Server數據庫在Visual Studio 2010中工作。我正在嘗試修復一個網站,這個網站可以讓管理人員爲員工分配各種任務。現在的問題是,如果兩個經理同時工作,可能會將錯誤的員工分配給一個任務。員工列表以gridview表示。由於GridView中的舊數據選擇錯誤的項目
該問題似乎發生是因爲其中一個用戶在GridView中查看舊數據。
假設的第一人載入列表,並在GridView看起來是這樣的:
-Employee 1
-Employee 2
-Employee 3
-Employee 4
然後第二個人進來併爲員工2分配任務,該員工從列表中移除員工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)。該頁面重新加載並嘗試執行回發事件,檢查並發現該控件尚未生效(因爲數據綁定發生在回發事件應該處理之後),所以我認爲回發事件會延遲到數據綁定之後。 (這裏是上一個頁面加載http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx事件的順序)。一旦gridview的已數據綁定,數據是最新的是這樣的:
-Employee 1
-Employee 3
-Employee 4
然後可以處理回發事件。回發事件包含所選控件的行索引。第三行被選中,所以回發事件從網格中獲得僱員4(現在在第三行)。然後,當我們想要員工3的唯一ID時,它使用該信息獲取員工4的唯一ID。我們如何確保在這種情況下獲得正確的員工ID?
問題似乎是數據綁定發生後應用了單擊並更改了網格。我認爲阻止頁面回發將是一件好事,但gridview操作都是服務器端,所以我不認爲我可以這樣做。我不知道通過回發來保存綁定數據的方法,因此每次回發時我們都有義務獲取新的,可能不同的數據。 我覺得我已經走過了大部分的選擇,你是否看到我的推理有什麼問題,或者有什麼新的嘗試建議?有沒有辦法在頁面回覆之前獲取員工ID?
該頁面對於只有一個用戶正常工作,該問題僅在多個用戶同時進行更改時纔會發生。
這正是那種解決方案,我正在尋找;我們假設用戶現在將使用單獨的數據。 我只是嘗試啓用ViewState,但無論如何加載的數據。除非明確告訴它,否則確保不會重新加載嗎? 謝謝! – Sauce 2013-05-09 16:41:16
您是如何加載數據的?確保你只在'Page.IsPostback'爲false時調用數據綁定。那麼不應該重新加載數據。 – magnattic 2013-05-09 19:35:28
我將GridView的DataSourceID設置爲ObjectDataSource,該ObjectDataSource將請求發送到服務器以獲取數據。我認爲必須自動調用數據綁定,因爲我不在代碼中的任何位置調用數據綁定。 – Sauce 2013-05-09 19:46:20