2015-11-02 100 views
0

之前,從網格視圖使用數據的正確方法我有一個創建的數據庫記錄的網格視圖用戶控件。每條記錄都有一個用於刪除記錄的複選框。什麼是數據綁定

我的問題是,在page_load事件建立網格視圖,然後刪除按鈕甚至火災。 deleteButton_click事件在GridView上循環查找複選框,但從來沒有找到任何事件,因爲'page_load'事件給了我一個乾淨的gridview。在重新構建網格視圖之前檢查已選框的最佳方法是什麼?或者我可以在不查看網格視圖的情況下獲取選中的值?

Protected Sub Page_Load(...) Handles Me.Load 

    'db calls and other code 
    gv.DataBind() 
End Sub 

Protected Sub btnDelAtt_Click(...) Handles btnDelAtt.Click 

    For Each grdRow As GridViewRow In gvFileViewer.Row 
     Dim chkBox As CheckBox = CType(grdRow.FindControl("cbItem"), CheckBox) 
     If chkBox.Checked = True Then 'this is always false thanks to page_load 
      'code that does not run 
     end if 
    next 
end sub 
+1

!IsPost返回頁面加載事件? – Moe

+0

^那。確保在頁面加載事件前檢查isPostBack,然後才能在頁面首次加載時執行一次操作。如果沒有Page.IsPostBack我認爲這是VB語法 – Nikki9696

+0

@Moe不幸的是頁面上的其他事件,可能導致網頁上加載後回來,我還需要網格視圖建立。 – Travis

回答

1

正如在評論中提到的,添加!IsPostBack應該做到這一點。 您只需要在初始調用中從數據庫加載網格,在發生回發時不需要再次獲取數據。刪除結束後,您需要重新綁定網格。

 Protected Sub Page_Load(...) Handles Me.Load 
     If(!Page.IsPostBack) 

      'db calls and other code 
      gv.DataBind() 

     End Sub 

     Protected Sub btnDelAtt_Click(...) Handles btnDelAtt.Click 

      For Each grdRow As GridViewRow In gvFileViewer.Row 
       Dim chkBox As CheckBox = CType(grdRow.FindControl("cbItem"), CheckBox) 
       //Delete your record 
       end if 

      next 
      //Rebind grid 
     end sub 
+0

頁面上有幾個事件會導致它回發(這是一種動態形式)。如果我沒有每次綁定它,網格是否仍然存在緩存數據? – Travis

+0

這就是視圖狀態的用途。但是因爲你會在刪除方法後重新綁定網格,這應該足夠了。 – Moe

+0

謝謝,我(顯然)對.net的東西以及'viewstate'是如何工作的,但我會弄明白的。所以我應該能夠得到和'getAttachments數據綁定()''時不isPostBack',並再次忽略gridview的,直到我需要添加/刪除一行,然後調用'getAttachments()'時再網格視圖預計會改變。整齊。我將在A.M.中嘗試。並回報!謝謝! – Travis