2014-01-23 22 views
0

我遇到了OnRowUpdating事件。它不會將新數據保存在GridView1.EditIndex行中。只要按下更新,它就會恢復到舊值。Gridview編輯更新到MS SQL數據庫

OnRowEditing似乎運作正常。

OnRowCancelingEdit也是如此,它似乎是正常工作。

ASPX:

<asp:GridView ID="GridView1" runat="server" AllowSorting="true" AutoPostBack="True" AutoGenerateColumns="True" AutoGenerateEditButton="True" OnRowCancelingEdit="Gridview1_OnRowCancelingEdit" OnRowEditing="Gridview1_OnRowEditing" OnRowUpdating="GridView1_OnRowUpdating" 
    AllowPaging="True" PageSize="50" OnPageIndexChanging="GridView1_PageIndexChanging"> 
</asp:GridView> 

後面的代碼:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ViewState("pageIndex") = 1 
    ViewState("edit") = -1 
    ShowGrid() 
End Sub 
Sub ShowGrid() 
    Dim connStr, cmdStr As String 
    connStr = connection string works" 
    cmdStr = "SELECT * FROM OrbitDates;" 
    Dim ds As New DataSet 
    Dim dt As New DataTable() 
    Try 
     Using conn As New SqlConnection(connStr) 
      Using cmd As New SqlCommand(cmdStr, conn) 
       conn.Open() 
       cmd.ExecuteNonQuery() 
       Using da As New SqlDataAdapter(cmd) 
        da.Fill(ds) 
        dt = ds.Tables(0) 
        GridView1.EditIndex = Convert.ToInt32(ViewState("edit")) 
        dt.DefaultView.Sort = ViewState("Sort") 
        GridView1.DataSource = dt.DefaultView 
        GridView1.DataBind() 
        GridView1.PageIndex = Convert.ToInt32(ViewState("pageIndex")) 
       End Using 
       conn.Close() 
       cmd.Dispose() 
       conn.Dispose() 
      End Using 
     End Using 
    Catch ex As Exception 

    End Try 
End Sub 
Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging 
    GridView1.PageIndex = e.NewPageIndex 
    ViewState("pageIndex") = e.NewPageIndex.ToString() 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) 
    GridView1.EditIndex = e.NewEditIndex 
    ViewState("edit") = GridView1.EditIndex 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs) 
    GridView1.EditIndex = -1 
    ViewState("edit") = 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 OrbitDates SET ([email protected],[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("@ido", GridView1.Rows(e.RowIndex).Cells(0).Text) 
       cmd.Parameters.AddWithValue("@JD", GridView1.Rows(e.RowIndex).Cells(1).Text) 
       cmd.Parameters.AddWithValue("@Xecl1", GridView1.Rows(e.RowIndex).Cells(2).Text) 
       cmd.Parameters.AddWithValue("@Yecl1", GridView1.Rows(e.RowIndex).Cells(3).Text) 
       cmd.Parameters.AddWithValue("@Zecl1", GridView1.Rows(e.RowIndex).Cells(4).Text) 

       cmd.ExecuteNonQuery() 
       conn.Close() 
       cmd.Dispose() 
       conn.Dispose() 
      End Using 
     End Using 
    Catch ex As Exception 
     Throw ex 
    End Try 
    ViewState("edit") = e.RowIndex 
    ShowGrid() 
End Sub 
+2

'「我選擇在aspx.vb工作,而不是ASPX因爲aspx.vb更加靈活,所以我的代碼是不可見的廣大市民。」' - 地球上的你是什麼甚至意思?我懷疑你對ASP.NET的工作原理有一些基本的誤解。 – David

回答

1

的問題是在GridView是覆蓋舊數據,因爲該代碼執行GridView1_OnRowUpdating前:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ViewState("pageIndex") = 1 
    ViewState("edit") = -1 
    ShowGrid() 
End Sub 

你需要放If Not IsPostBack裏面Page_Load

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     ViewState("pageIndex") = 1 
     ViewState("edit") = -1 
     ShowGrid() 
    End If 
End Sub 

試着更多地瞭解ASP.NET Page Life Cycle

0
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ViewState("pageIndex") = 1 
    ViewState("edit") = -1 
    ShowGrid() 
End Sub 
Sub ShowGrid() 
    Dim connStr, cmdStr As String 
    connStr = connection string works" 
    cmdStr = "SELECT * FROM OrbitDates;" 
    Dim ds As New DataSet 
    Dim dt As New DataTable() 
    Try 
     Using conn As New SqlConnection(connStr) 
      Using cmd As New SqlCommand(cmdStr, conn) 
       conn.Open() 
       cmd.ExecuteNonQuery() 
       Using da As New SqlDataAdapter(cmd) 
        da.Fill(ds) 
        dt = ds.Tables(0) 
        GridView1.EditIndex = Convert.ToInt32(ViewState("edit")) 
        dt.DefaultView.Sort = ViewState("Sort") 
        GridView1.DataSource = dt.DefaultView 
        GridView1.DataBind() 
        GridView1.PageIndex = Convert.ToInt32(ViewState("pageIndex")) 
       End Using 
       conn.Close() 
       cmd.Dispose() 
       conn.Dispose() 
      End Using 
     End Using 
    Catch ex As Exception 

    End Try 
End Sub 
Protected Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles GridView1.PageIndexChanging 
    GridView1.PageIndex = e.NewPageIndex 
    ViewState("pageIndex") = e.NewPageIndex.ToString() 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) 
    GridView1.EditIndex = e.NewEditIndex 
    ViewState("edit") = GridView1.EditIndex 
    ShowGrid() 
End Sub 
Protected Sub GridView1_OnRowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs) 
    GridView1.EditIndex = -1 
    ViewState("edit") = 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 OrbitDates SET ([email protected],[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("@ido", GridView1.Rows(e.RowIndex).Cells(0).Text) 
       cmd.Parameters.AddWithValue("@JD", GridView1.Rows(e.RowIndex).Cells(1).Text) 
       cmd.Parameters.AddWithValue("@Xecl1", GridView1.Rows(e.RowIndex).Cells(2).Text) 
       cmd.Parameters.AddWithValue("@Yecl1", GridView1.Rows(e.RowIndex).Cells(3).Text) 
       cmd.Parameters.AddWithValue("@Zecl1", GridView1.Rows(e.RowIndex).Cells(4).Text) 

       cmd.ExecuteNonQuery() 
       conn.Close() 
       cmd.Dispose() 
       conn.Dispose() 
      End Using 
     End Using 
    Catch ex As Exception 
     Throw ex 
    End Try 
    ViewState("edit") = e.RowIndex 
    ShowGrid() 
End Sub