2011-06-25 46 views
0

我正在使用ItemTemplate & EditTemplate編輯gridview。 (ASP.net + VB)。Gridview - 無法獲取RowUpdating更新的單元格值

我點擊編輯按鈕,然後我可以選中/取消選中這些複選框並修改文本框的值。 當點擊UPDATE按鈕時,它會觸發RowUpdating事件,但是我發現當我得到update語句的值時,它仍然會在編輯前獲取值,而不是更新值。

如何獲取最新的&更新值?謝謝。 喬

以下是VB代碼:

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 

    'Update the values. 
    Dim row = Gridview1.Rows(e.RowIndex) 

    Dim Col1_SL = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_SL"), CheckBox) 
    Dim Col1_VL = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_VL"), CheckBox) 
    Dim Col1_ML = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_ML"), CheckBox) 
    Dim Col1_PH = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_PH"), CheckBox) 
    Dim Col1_APH = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_APH"), CheckBox) 
    Dim Col1_TOIL = CType(Gridview1.Rows(e.RowIndex).FindControl("cb1_TOIL"), CheckBox) 
    Dim Col1_Others = CType(Gridview1.Rows(e.RowIndex).FindControl("tb1_Others"), TextBox) 
    Dim Col1_RosterKey = CType(Gridview1.Rows(e.RowIndex).FindControl("lb1_rosterkey"), Label) 

    Using conn As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("hris_shiftdutyConnectionString").ConnectionString) 
     conn.Open() 
     cmd.Connection = conn 
     sql = "SET DATEFORMAT dmy;UPDATE troster SET SL='" & Convert.ToInt32(Col1_SL.Checked) & "' where roster_key='" & Col1_RosterKey.Text & "';" 
     cmd.CommandText = Sql 
     reader = cmd.ExecuteReader() 
     conn.Close() 
     reader.Close() 
    End Using 

    'Reset the edit index. 
    Gridview1.EditIndex = -1 

    'Bind data to the GridView control. 
    BindData() 
End Sub 

回答

1

最可能的原因將是這個。
您正在呼籲Page_LoadBindData()不使用!IsPostBack

Protected Sub Page_Load Handles Me.Load 
    If Not IsPostBack 
     ' Bind Grid only at the first load 
     ' Do not load Grid again at Postbacks 
     BindData() 
    End If 
End Sub 
+0

您好,我得到這個錯誤味精 「索引超出範圍必須爲非負數且小於集合的大小參數名:索引」 後,我停止調用bindata() page_load for!IsPostBack 運行此代碼時發生錯誤: Dim row = Gridview1.Rows(e.RowIndex) –

+0

您能告訴我函數BindData嗎? – naveen

0

你有2種選擇:

  1. 有一個單獨的RowUpdated方法是更新已被綁定的數據源進行後解僱到網格視圖。該方法將包含編輯和插入的新值。
  2. RowUpdating方法應該有一個GridViewEventArgs類型的參數。這將有一個名爲NewValues的屬性,其中包含新值。在你的例子中,這是變量e
+0

嗨,對於選項2,我如何使用NewValues函數? e.NewValues?謝謝 –

+0

'e.NewValues'是一種字典類型,因此您可以像使用它'col1 = e.NewValues [「BindingName」]'其中BindingName是該列的數據綁定名稱。 – user815091

+0

oic。但我怎麼能指示行索引來獲取更新的單元格值? –