I am now having a related problem. I have my Edit button (the button from
the ItemTemplate) working, but three of the controls in the EditTemplate (a
Calendar control, a Button with CommandName="update", and a Button with
CommandName="cancel"). Whenever I click on any of these controls the
EditItem returns to being just an Item. I am assuming this is because the
method I made to do the binding is somehow getting called. However, I can't
figure out where it is getting called from, since my Page_Load does not
include it (my Page_Load simply assigns a value to a Label's Text property).
Any ideas? Here is my databinding code and my DataList events:
Private Sub RefreshEvents()
Dim events As New DataSet
Dim myconnection As New
OracleConnection(System.Configuration.ConfigurationSettings.AppSettings("connectionString"))
Dim cmdselect As New OracleCommand("SELECT * FROM eventlist WHERE
eventdate<TO_DATE('" & Date.Now.ToShortDateString() & "','MM/DD/YYYY')",
myconnection)
Dim cmddelete As New OracleCommand("", myconnection)
Dim eventsadapter As New OracleDataAdapter(cmdselect)
'Delete any past events and the people who registered for them
eventsadapter.Fill(events, "eventlist")
If events.Tables("eventlist").Rows.Count <> 0 Then
For Each pastevent As DataRow In events.Tables("eventlist").Rows
cmddelete.CommandText = "DELETE FROM registered WHERE eventid=" &
pastevent.Item("eventid")
myconnection.Open()
cmddelete.ExecuteNonQuery()
cmddelete.CommandText = "DELETE FROM eventlist WHERE eventid=" &
pastevent.Item("eventid")
cmddelete.ExecuteNonQuery()
myconnection.Close()
If pastevent.Item("details") <> "" AndAlso
System.IO.File.Exists(Server.MapPath("eventdetails/" &
pastevent.Item("details"))) Then
System.IO.File.Delete(Server.MapPath("eventdetails/" &
pastevent.Item("details")))
Next
End If
'Fill DataSet with all remaining events
events.Clear()
cmdselect.CommandText = "SELECT * FROM eventlist ORDER BY eventdate"
eventsadapter.SelectCommand = cmdselect
eventsadapter.Fill(events, "eventlist")
datEditEvents.DataSource = events
datEditEvents.DataBind()
ddlDeleteEvents.Items.Clear()
For Each existevent As DataRow In events.Tables("eventlist").Rows
ddlDeleteEvents.Items.Add(New
ListItem(CDate(existevent("eventdate")).ToShortDateString() & " " &
existevent("eventname"), existevent("eventid")))
Next
End Sub
Private Sub datEditEvents_EditCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataListCommandEventArgs) Handles
datEditEvents.EditCommand
datEditEvents.EditItemIndex = e.Item.ItemIndex
Me.RefreshEvents()
End Sub
Private Sub datEditEvents_UpdateCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataListCommandEventArgs) Handles
datEditEvents.UpdateCommand
If CType(e.Item.FindControl("calEditDate"), Calendar).SelectedDate >
Date.Today() Then
CType(e.Item.FindControl("lblDateError"), Label).Visible = False
If CType(e.Item.FindControl("txtEditName"), TextBox).Text <> "" Then
CType(e.Item.FindControl("lblNameError"), Label).Visible = False
CType(e.Item.FindControl("revEditDesc"),
RegularExpressionValidator).Validate()
If CType(e.Item.FindControl("revEditDesc"),
RegularExpressionValidator).IsValid Then
Dim myconnection As New
OracleConnection(System.Configuration.ConfigurationSettings.AppSettings("connectionString"))
Dim cmdupdate As New OracleCommand("UPDATE eventlist SET eventname='" &
CType(e.Item.FindControl("txtEditName"), TextBox).Text.Replace("'", "''") &
"',description='" & CType(e.Item.FindControl("txtEditDesc"),
TextBox).Text.Replace("'", "''") & "',eventdate=TO_DATE('" &
CType(e.Item.FindControl("calEditDate"),
Calendar).SelectedDate.ToShortDateString() & "','MM/DD/YYYY')",
myconnection)
If CType(e.Item.FindControl("radNoDetails"), RadioButton).Checked Then
'Delete existing file
If e.CommandArgument <> "" AndAlso
System.IO.File.Exists(Server.MapPath("eventdetails/" & e.CommandArgument))
Then System.IO.File.Delete(Server.MapPath("eventdetails/" &
e.CommandArgument))
'Set details=''
cmdupdate.CommandText &= ",details=''"
End If
If CType(e.Item.FindControl("radNewDetails"), RadioButton).Checked Then
'Delete existing file
If e.CommandArgument <> "" AndAlso
System.IO.File.Exists(Server.MapPath("eventdetails/" & e.CommandArgument))
Then System.IO.File.Delete(Server.MapPath("eventdetails/" &
e.CommandArgument))
'Upload new file
Dim upfilename As String = ""
If fileDetails.Value <> "" AndAlso fileDetails.PostedFile.ContentLength > 0
Then
Dim dir As String() =
fileDetails.PostedFile.FileName.Split("\".ToCharArray())
upfilename = dir(dir.GetUpperBound(0))
fileDetails.PostedFile.SaveAs(Server.MapPath("eventdetails/" & upfilename))
End If
'Set details to new filename
cmdupdate.CommandText &= ",details='" & upfilename & "'"
End If
cmdupdate.CommandText &= " WHERE eventid=" &
datEditEvents.DataKeys(e.Item.ItemIndex)
myconnection.Open()
cmdupdate.ExecuteNonQuery()
myconnection.Close()
datEditEvents.EditItemIndex = -1
Me.RefreshEvents()
End If
Else
CType(e.Item.FindControl("lblNameError"), Label).Visible = True
End If
Else
CType(e.Item.FindControl("lblDateError"), Label).Visible = True
End If
End Sub
Private Sub datEditEvents_CancelCommand(ByVal source As Object, ByVal e As
System.Web.UI.WebControls.DataListCommandEventArgs) Handles
datEditEvents.CancelCommand
datEditEvents.EditItemIndex = -1
Me.RefreshEvents()
End Sub
Thank you so much.