2014-01-16 62 views
0

In Default.aspx AutoGenerateEditButton啓用沿着第一列(OnRowEditing)的「編輯」按鈕當您按下「編輯」按鈕時,它會再出現兩個按鈕:更新(OnRowUpdating)和取消(OnRowCancelingEdit)。我需要「更新」按鈕和SQL語句中的數據幫助。更新和OnRowUpdating

<asp:GridView ID="GridView1" runat="server" AutoPostBack="True" AutoGenerateColumns="False" AutoGenerateEditButton="True" OnRowCancelingEdit="Gridview1_OnRowCancelingEdit" OnRowEditing="Gridview1_OnRowEditing" OnRowUpdating="GridView1_OnRowUpdating> 
    </asp:GridView> 

在Default.aspx.vb

Protected Sub GridView1_OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) 
    GridView1.EditIndex = e.NewEditIndex 
    ViewState("pageIndex") = GridView1.EditIndex 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs) 
    GridView1.EditIndex = -1 
    ViewState("pageIndex") = GridView1.EditIndex 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 
    Dim connStr, cmdStr As String 
    connStr = "Connection String works" 
    cmdStr = "UPDATE table1 SET ([email protected],[email protected],[email protected]) WHERE [email protected];" 
    Try 
     Using conn As New SqlConnection(connStr) 
      Using cmd As New SqlCommand(cmdStr, conn) 
       conn.Open() 
       cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(1).Text) 
       cmd.Parameters.AddWithValue("@col2", GridView1.Rows(e.RowIndex).Cells(2).Text) 
       cmd.Parameters.AddWithValue("@col3", GridView1.Rows(e.RowIndex).Cells(3).Text) 
       cmd.Parameters.AddWithValue("@col4", GridView1.Rows(e.RowIndex).Cells(4).Text) 
       cmd.ExecuteNonQuery() 
       conn.Close() 
       cmd.Dispose() 
       conn.Dispose() 
      End Using 
     End Using 
    Catch ex As Exception 


    End Try 
    ShowGrid() 
End Sub 

我不知道有關的代碼行:

GridView1.Rows(e.RowIndex).Cells(1)。文本)

這是什麼意思,你選擇「編輯」,然後編輯條目,然後按更新

什麼是colu行mn「單元格(1)」1表示第一列?

什麼是「單元格(2)」2列是用於第二列?

id在col1中,並且是主鍵,所以如果它被改變了,它應該到達堆棧的底部。

當我更新一列時,它會自動恢復到舊值。

+0

確保如果您在Page_Load中調用'ShowGrid()',它在任何'If Not IsPostBack ... EndIf'塊內。 – afzalulh

回答

0

e.RowIndex表示正在編輯的行的索引,它是從零開始的。例如,0表示第一行,1表示第二行,依此類推。

GridView1.Rows(e.RowIndex).Cells(1).Text表示某個列的文本,並且Cells(i)也是基於零的,如e.RowIndex。例如,如果e.RowIndex的值爲0,則GridView1.Rows(e.RowIndex).Cells(1).Text將返回第一行和第二列的文本。同樣的事情適用於GridView1.Rows(e.RowIndex).Cells(2).Text,它將返回第一行和第三列的文本。

我想你可能將錯誤的值傳遞給@id參數,並且更新語句沒有更新任何內容,因爲在數據庫中找不到該值。

既然你說「ID是在col1和是主鍵」,我猜這行:

cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(1).Text) 

應該改成這樣:

cmd.Parameters.AddWithValue("@id", GridView1.Rows(e.RowIndex).Cells(0).Text)