Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here If Not IsPostBack Then DataGrid_DataBind() End If End Sub Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand DataGrid1.EditItemIndex = e.Item.ItemIndex 'Dim stritemtype As String = e.Item.ItemType Dim AppId As Integer = DataGrid1.DataKeys(e.Item.ItemIndex) DataGrid_DataBind() End Sub Sub DataGrid_DataBind() Dim d As New Data DataGrid1.DataSource = d.CreateDataSource() DataGrid1.DataBind() End Sub Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand If e.Item.ItemType = ListItemType.EditItem Then Dim dropdownlistAppName As DropDownList = e.Item.FindControl("dropAppName") Response.Write("ok") Dim dropdownlistAppNameText As String Dim dropdownlistAppNameValue As String dropdownlistAppNameText = "Test1" dropdownlistAppNameValue = "1" dropdownlistAppName.Items.Add(New ListItem(dropdownlistAppNameText, dropdownlistAppNameValue)) 'While rd.Read ' dropdownlistAppNameText = rd("subApplication_Name") ' dropdownlistAppNameValue = rd("subApplication_id") ' dropdownlistAppName.Items.Add(New ListItem(dropdownlistAppNameText, dropdownlistAppNameValue)) 'End While End If DataGrid1.EditItemIndex = -1 DataGrid_DataBind() End Sub
你把Page_Load里的绑定datagrid别放在if Not Page.IsPostBack这里。 我是这么做的,我没用模板列 在ItemDataBound事件下这样写的 Dim arr() Dim inputproj As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox) inputproj.ID = "inputproj" inputproj.Visible = False ReDim arr(4) arr(0) = "" arr(1) = "设计" arr(2) = "批注" arr(3) = "确认结束" arr(4) = "任务" j = 0 Dim dropproj As New DropDownList() For i = 0 To UBound(arr) dropproj.Items.Add(arr(i)) If arr(i) = Trim(inputproj.Text) Then j = i End If Next dropproj.SelectedIndex = j dropproj.ID = "dropproj" e.Item.Cells(2).Controls.Add(dropproj)
'Put user code to initialize the page here
If Not IsPostBack Then
DataGrid_DataBind()
End If
End Sub Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand
DataGrid1.EditItemIndex = e.Item.ItemIndex 'Dim stritemtype As String = e.Item.ItemType Dim AppId As Integer = DataGrid1.DataKeys(e.Item.ItemIndex) DataGrid_DataBind() End Sub
Sub DataGrid_DataBind()
Dim d As New Data
DataGrid1.DataSource = d.CreateDataSource()
DataGrid1.DataBind()
End Sub Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand
If e.Item.ItemType = ListItemType.EditItem Then Dim dropdownlistAppName As DropDownList = e.Item.FindControl("dropAppName")
Response.Write("ok") Dim dropdownlistAppNameText As String Dim dropdownlistAppNameValue As String
dropdownlistAppNameText = "Test1" dropdownlistAppNameValue = "1" dropdownlistAppName.Items.Add(New ListItem(dropdownlistAppNameText, dropdownlistAppNameValue)) 'While rd.Read ' dropdownlistAppNameText = rd("subApplication_Name") ' dropdownlistAppNameValue = rd("subApplication_id") ' dropdownlistAppName.Items.Add(New ListItem(dropdownlistAppNameText, dropdownlistAppNameValue))
'End While
End If
DataGrid1.EditItemIndex = -1
DataGrid_DataBind()
End Sub
DataGrid1.EditItemIndex = -1 否则还是处于更新状态并且重新绑定datagrid
dropdownlist会重新生成 它的数据 当然也就没了
点击更新按钮,按钮事件上浮到DataGrid1_updateCommand
点击取消按钮,按钮事件上浮到DataGrid1_CancelCommand
点击一般的按钮,按钮事件上浮到DataGrid1_itemCommand
我是这么做的,我没用模板列
在ItemDataBound事件下这样写的
Dim arr()
Dim inputproj As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
inputproj.ID = "inputproj"
inputproj.Visible = False
ReDim arr(4)
arr(0) = ""
arr(1) = "设计"
arr(2) = "批注"
arr(3) = "确认结束"
arr(4) = "任务"
j = 0
Dim dropproj As New DropDownList()
For i = 0 To UBound(arr)
dropproj.Items.Add(arr(i))
If arr(i) = Trim(inputproj.Text) Then
j = i
End If
Next
dropproj.SelectedIndex = j
dropproj.ID = "dropproj"
e.Item.Cells(2).Controls.Add(dropproj)