Click here to Skip to main content
15,902,198 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi all
I am trying to build a dynamic gridview in a page, everything is working properly until I edit a record and press Update, when I do, it takes the old values.
my code in the updating event is:
Private Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
    Dim con As New SqlConnection(ConnectionStrings("Test").ToString)
    Try
        Dim row = GridView1.Rows(e.RowIndex)
        Dim tran As SqlTransaction
        Dim da As New SqlDataAdapter
        Dim strENo, strEName, strDob, strSalary, strDNo As String
        strENo = (CType((row.Cells(0).Controls(0)), TextBox)).Text
        strEName = (CType((row.Cells(1).Controls(0)), TextBox)).Text
        strDob = (CType((row.Cells(2).Controls(0)), TextBox)).Text
        strSalary = (CType((row.Cells(3).Controls(0)), TextBox)).Text
        strDNo = (CType((row.Cells(4).Controls(0)), TextBox)).Text
        If con.State = ConnectionState.Closed Then con.Open()
        tran = con.BeginTransaction
        Dim comUpt As New SqlCommand("SP_UPDATE_EMP", con)
        comUpt.CommandType = CommandType.StoredProcedure
        comUpt.Parameters.Add(New SqlParameter("@Emp_no", SqlDbType.Char, 10)).Value = strENo
        comUpt.Parameters.Add(New SqlParameter("@Emp_Name", SqlDbType.VarChar, 50)).Value = strEName
        comUpt.Parameters.Add(New SqlParameter("@DOB", SqlDbType.DateTime, 8)).Value = strDob
        comUpt.Parameters.Add(New SqlParameter("@Salary", SqlDbType.Decimal, 17)).Value = strSalary
        comUpt.Parameters.Add(New SqlParameter("@D_No", SqlDbType.SmallInt, 2)).Value = strDNo
        comUpt.Parameters.Add(New SqlParameter("@ErrNo", SqlDbType.SmallInt)).Direction = ParameterDirection.Output
        comUpt.Transaction = tran
        da.UpdateCommand = comUpt
        da.Update(ds, "emp")
        tran.Commit()
        LoadGrid()
    Catch ex As Exception
    Finally
        If con.State = ConnectionState.Open Then con.Close()
    End Try
End Sub

can anybody advice me what should I do?
Posted
Updated 8-Nov-10 1:46am
v3
Comments
m@dhu 8-Nov-10 7:47am    
edited for code block.
jim lahey 8-Nov-10 9:40am    
Please post the code for the Page_Load event also - I need to see if you're doing anything with the grid there
fadi77_net 9-Nov-10 1:45am    
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
LoadGrid()
Catch ex As Exception

End Try
End Sub

Private Sub LoadGrid()
GridView1.Columns.Clear()
Dim col As New BoundField
col.DataField = "Emp_no"
col.HeaderText = "No."
GridView1.Columns.Add(col)

col = New BoundField
col.DataField = "Emp_Name"
col.HeaderText = "Name"
GridView1.Columns.Add(col)

col = New BoundField
col.DataField = "DOB"
col.HeaderText = "Date of Birth"
GridView1.Columns.Add(col)

col = New BoundField
col.DataField = "Salary"
col.HeaderText = "Salary"
GridView1.Columns.Add(col)

col = New BoundField
col.DataField = "D_No"
col.HeaderText = "Department No."
GridView1.Columns.Add(col)

Dim colf As CommandField = New CommandField
colf.EditText = "Edit"
colf.UpdateText = "Update"
colf.CancelText = "Cancel"
colf.ShowCancelButton = True
colf.ShowEditButton = True
colf.ShowSelectButton = True

GridView1.Columns.Add(colf)

Dim con As New SqlConnection(ConnectionStrings("Test").ToString)
If con.State = ConnectionState.Closed Then con.Open()
Dim com As New SqlCommand("select * from tb_emp", con)
Dim da As New SqlDataAdapter(com)
da.Fill(ds, "emp")

ds.Tables("emp").PrimaryKey = New DataColumn() {ds.Tables("emp").Columns("emp_no")}
GridView1.DataMember = "emp"
GridView1.DataSource = ds
GridView1.DataBind()

End Sub

1 solution

Well, you are loading the grid evertime in your pageload. Hence the old values. Use Page IsPostback property to avoid it and it should be good.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900