2010-08-06 58 views
2

我已經設置了一個DataGrid,其中包含多個列,並在該行的末尾添加了複選框和列。DataGrid按鈕 - 回發或回調無效

我也在更改OnItemCreated事件上的數據網格佈局,該事件通過使用「Rowspan」屬性擴展行來更改數據網格的佈局,並刪除不再需要的額外列和控件。

原始數據網格佈局是設置這樣的:

___________________________________________ 
| 1 | Employee Name | 01/08/10 |[] |[SAVE]| 
| 1 | Employee Name | 02/08/10 |[] |[SAVE]| 
___________________________________________ 
| 2 | Employee Name | 01/08/10 |[] |[SAVE]| 
___________________________________________ 
| 3 | Employee Name | 04/08/10 |[] |[SAVE]| 
| 3 | Employee Name | 05/08/10 |[] |[SAVE]| 
| 3 | Employee Name | 06/08/10 |[] |[SAVE]| 
___________________________________________ 
| 4 | Employee Name | 03/08/10 |[] |[SAVE]| 
___________________________________________ 

而現在它看起來像這樣具有擴展行,去掉了控件和數據網格列刪除...

___________________________________________ 
| 1 | Employee Name | 01/08/10 |[] |[SAVE]| 
| |    | 02/08/10 | |  | 
___________________________________________ 
| 2 | Employee Name | 01/08/10 |[] |[SAVE]| 
___________________________________________ 
| 3 | Employee Name | 04/08/10 |[] |[SAVE]| 
| |    | 05/08/10 | |  | 
| |    | 06/08/10 | |  | 
___________________________________________ 
| 4 | Employee Name | 03/08/10 |[] |[SAVE]| 
___________________________________________ 

的頁面在打開時顯示,並且每次用戶單擊頁碼時,頁面控件都按預期工作。

但是,當我點擊特定員工的[SAVE]按鈕時,錯誤消息顯示類似「無效回傳或回叫」的消息。我知道這是我在數據網格中刪除的控件和列的結果,而事件驗證與原始渲染項目不匹配。

我不想刪除EnableEventValidation,因爲這是一個安全問題。

我知道我必須使用Render方法來修復在頁面顯示之前所做的任何更改,但是如何解決此回發問題?

回答

0

好吧,讓我們看看錯誤來自哪裏。

GridView是使用__DoPostBack()javascript調用,並沒有他自己的輸入。因此,他自己不會從其他單元發送任何輸入數據。

現在我認爲你沒有做出自定義DoPostBack調用 - 對嗎?

驗證的第二點是ViewState Data。

是否有任何更改使用任何UpdatePanel,並在中間進行更改此ViewState的更新?

我建議你嘗試的是發送EnableViewState =「false」在你的GridView上看看你是否仍然得到這個錯誤。這不會影響您,因爲每個更新中的GridView會重新讀取需要創建的數據。

第二點,你需要檢查,是你改變你的數據和觀察狀態。也許把它放在其他地方解決問題。例如,如果您在Page_Load上使用它,也許您需要將它移動到PageInit上 - 或者反之亦然。

希望得到這個幫助。

+0

嗨Aristos, 是的,我有一個更新面板中的數據網格,現在已禁用EnableViewState。該按鈕現在可以正常工作,並且可以按預期方式讀取複選框的值。 但是,無論我處於哪個頁面,頁面編號都會重置回第1頁。如果我現在無法從數據網格中檢索視圖狀態的值,我該如何獲取頁碼? 謝謝。 – 2010-08-08 22:49:08

+0

@laughing無法保持頁面與讀取數據的地方有關 - 您要執行Bind()並在datagrid上設置數據。你在尋呼機之後有地方,所以失去它。改變你在datagrid上設置數據的點,例如在pageinit上移動它並檢查它。這可能是一開始就存在的問題。 – Aristos 2010-08-09 05:34:57

+0

我改變了重新綁定數據的位置,並且數據網格按預期工作。 – 2010-08-10 03:21:45

相關問題