2012-03-05 75 views
2

我有一個gridview複選框控件作爲模板字段和一個有界域.. 網格綁定在每一個回傳通過一個函數和網格內容保持相同的每個帖子back ..現在什麼時候我檢查其中一個複選框,然後單擊頁面末尾的按鈕,我需要存儲該特定的行信息..但我無法檢索該信息,因爲當我檢查然後單擊按鈕..頁面加載,然後網格再次填充,然後複選框變得不勾選,並且沒有CheckedChanged事件觸發..與我聯繫 我需要在每次回發時保持複選框的狀態,即使它被檢查..如何執行此操作?gridview中的複選框控件

+0

您是否必須在每次回發時綁定網格? – pavanred 2012-03-05 05:57:24

回答

0

這是可能的,如果你正在使用asp.net 4.0使用

<asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> 
</asp:GridView> 

如果使用的是3.5,你將不得不保留viewstatecheckbox信息。我希望這會有所幫助。

http://www.codeproject.com/Articles/202938/How-to-select-multiple-records-from-the-GridView-a

另一種選擇:

這是MSDN如何描述一個hotmail類型的GridView ..可能是這可以幫助..這將要求您擴展現有的GridView控件。 http://msdn.microsoft.com/en-us/magazine/cc163612.aspx

問候。

+0

我正在使用asp.net 3.5,並且我正在多個dropdownlist控件上對服務器進行多次回發..現在我想要從網格中選擇一些複選框,然後單擊最後的按鈕..網格應顯示爲在page_load之後檢查選定的,但這並沒有發生,因爲在page_load上綁定數據的函數被調用,並且複選框被取消選中..i認爲它可能只有當我不做回發和在網格上使用javascript控制.. – user1249061 2012-03-05 06:37:25

+0

Ajax是一個選項,但它將需要改變你當前處理事件的方式..有一件事要問你是否將複選框綁定到某個dataitem元素?你真的需要數據綁定複選框嗎? – 2012-03-06 08:31:16

+0

請檢查我通過擴展gridview控件添加了另一個選項..希望這會有所幫助 – 2012-03-06 08:33:32

0

page_load事件功能,請使用如下代碼爲持久性數據

if (!IsPostBack) 
{ 
    //your static data 
} 
+0

但回發是發生多次,網格應該在每個回傳中都可見..如果我調用我的函數,它只綁定數據if (!IsPostBack)網格將在以後的回傳中變得不可見。 – user1249061 2012-03-05 06:39:47

0

這個特殊的問題是相當普遍的。我還沒有看到任何「簡單」的解決方案,但這裏有3個我已經使用的獨立方法。由於系統中的限制,每個都被使用。

解決方案1 ​​
使用AJAX。通過將控件放置在更新面板中,您可以通過在數據庫中實現「實時」來保存更改。這不是一個「簡單」的解決方案,但在我看來這是最容易實現的解決方案之一。由於這種變化是立竿見影的,因此沒有必要擔心後備和持久性。

解決方案2
使用「變更管理」控件進行排序。您可以應用一個隱藏的控件,其值用於跟蹤相關控件中所做的任何更改。您需要設計一個連貫的數據結構,以提供至少一個控制ID和新值(如果需要某種「回滾」功能,可能是舊值)。這需要使用JavaScript進行編碼,以便隱藏控件值的任何更改都是結構化的,而不是重複的。然後在回發中,您需要閱讀此控件的值,進行任何相關更改,然後根據需要重新綁定您的數據。這可能相當麻煩,並且如果您將此應用程序傳遞給繼任者,則需要詳細記錄。

解決方案3
使用回傳的CheckChanged事件,並保持在視圖狀態管理的所有數據。在GridView的RowItemCreated事件期間,您可以在相關單元中找到複選框控件,並手動將委託處理程序添加到該控件以處理髮生CheckChanged事件觸發事件時的回發。然後您可以立即更改。這個缺點是PostBack事件變得頻繁和沉重。如果您在ViewState中存儲大量數據,這也會導致頁面加載速度緩慢且無法響應,因此無論您爲ViewState選擇哪種結構,都需要保持較小。