DataGrid 中UpdateCommand 不更新应注意..
代码:
Protected Sub DataGrid_MenuList_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid_MenuList.UpdateCommand
Dim LevelID As DropDownList = CType(e.Item.Cells(0).Controls(1), DropDownList)
Dim Status As DropDownList = CType(e.Item.Cells(4).Controls(1), DropDownList)
Dim id = Convert.ToInt32(DataGrid_MenuList.DataKeys(e.Item.ItemIndex).ToString)
Dim Menu_ID As String = CType(e.Item.Cells(1).Controls(0), TextBox).Text
Dim Menu_Name As String = CType(e.Item.Cells(2).Controls(0), TextBox).Text
Dim Url As String = CType(e.Item.Cells(3).Controls(0), TextBox).Text
Dim sql As New System.Text.StringBuilder
sql.Append("UPDATE TB_Menu SET Index_ID='" & LevelID.SelectedValue & "', Menu_Name='" & Menu_Name & "', Url='" & Url & "', Status='" & Status.SelectedValue & "', Last_Modified_User='Lilo', Last_Modified_Date='" & Now.ToString("yyyy-MM-dd") & "' ")
sql.Append("WHERE Menu_ID ='" & Menu_ID & "'")
Live.Ado.ADOProxy.UpdateRowByQuery(sql.ToString)
DataGrid_MenuList.EditItemIndex = -1
BindMenu()
End Sub
单纯的看这段代码里没有凭问题的,
取绑定值的方法也完全正确,如果DataGrid 中没有绑定其它控件,则为CType(e.Item.Cells(1).Controls(0), TextBox).Text , 注:Cell(1) 当前行的第2 个单元格,起始是从第0记数的, Controls(0) 代表是没有取绑定控件
CType(e.Item.Cells(0).Controls(1), DropDownList)
表示取当前编辑行 的绑定控件,绑定的控件为DropDownList
问题:Update 到数据库,并无任何变化
单步调试,可以看到程序没有取到最新输入的值
当然到更新到数据库也不会有何变化
问题解决:
这里你应该检查page_load里没有对ispostback做判断处理
将绑定数据放入 Not ispostBack 内:
If Not IsPostBack Then
BindMenu()
End If
这个跟Asp.net 的页面调用顺序相关的,如果没有调Ispostback ,导致datagrid重新绑定,覆盖了修改的结果。