Я работаю над приложением vb.net (я очень плохо знаком с vb.net), и только что добавил DatePicker
в поле в форме - PostDate
(поле ранее было просто текстовое поле).
Похоже, что средство выбора даты работает визуально - когда пользователь щелкает внутри поля формы, появляется календарь выбора даты, и они могут выбрать дату текущего месяца или переключить месяцы, чтобы выбрать дату из другого месяца. Как только пользователь выбрал дату, календарь исчезает, и вновь выбранная дата отображается в поле в формате мм / дд / гггг.
Однако при отладке моего приложения, когда я достигаю функции UpdateButton_Click()
, которая обрабатывает обновления полей в форме (т.е. проверяет, изменилось ли какое-либо из их значений, и обновляет их в базе данных, если они имеют ), Я вижу, что в строке, которую я добавил для проверки изменений в поле даты, в которое я только что добавил DatePicker, переменная даты по-прежнему содержит предыдущее значение (т.е. исходную дату, а не вновь выбранную дату).
Функция UpdateButton_Click()
определяется с помощью:
Protected Sub UpdateButton_Click(sender As Object, e As EventArgs) Handles UpdateButton.Click
If Page.IsPostBack Then
...
Dim mypostdate As String = HttpUtility.HtmlEncode(PostDate.Text & " " & theTime.Text)
...
C.updateCaseByCaseID(... mypostdate, ...)
...
Next
End If
End Sub
Если я поставлю точку останова на эту функцию и пройдусь по ней, то увижу, что значение PostDate.Text
всегда является его исходным значением (т. Е. Оно имеет предварительно сохраненное значение при загрузке страницы). Даже если я изменю значение поля на новую дату с помощью средства выбора даты, хотя поле отображает новую дату в браузере, при выполнении этой функции значение PostDate.Text
всегда является исходным значением даты.
Вызов C.updateCaseByCaseID(...)
, кажется, является тем, что обрабатывает обновления базы данных, и был первоначально определен в case.vb с:
Public Function updateCaseByCaseID(ByVal Caseid As String, ...) As String
Dim con As New SqlConnection(connectionString)
Dim sql As String = "UPDATE tableName SET "
sql = sql & " ReportNumber=@ReportNumber, ... "
If status = "" Then
Else
sql = sql & " ,status=status "
End If
...
If PostDate = "" Then
Else
sql = sql & ", PostDate=@PostDate"
End If
' Other similar If Else statements for the other parameters '
...
Dim cmd As New SqlCommand(sql, con)
cmd.Parameters.AddWithValue("@CID", Cid)
...
cmd.Parameters.AddWithValue("@PostDate", PostDate)
' Other similar AddWithValue statements '
...
If state = "" Then
Else
cmd.Parameters.AddWithValue("@State", State)
End If
' Other similar If statements for the other parameters '
...
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Dim myaction As String = "Done"
Return myaction
End Function
Я добавил параметр postdate
в переменную sql
, изменив эту строку на:
sql = sql & " ReportNumber=@ReportNumber, ..., PostDate=@PostDate, ...
Однако, хотя теперь обновляется значение поля даты публикации, оно, по-видимому, обновляет его до сегодняшней даты, а не до даты, выбранной DatePicker. Это происходит потому, что хотя в поле PostDate
отображается новая выбранная дата в браузере, в функции UpdateButton_Click(...)
в строке
Dim mypostDate As String = HttpUtility.HtmlEncode(PostDate.Text + " " + theTime.Text)
переменная PostDate.Text
, то есть поле формы, которое отображает вновь выбранную дату в браузере, похоже, имеет значение сегодняшней даты ... Я не понимаю, почему это происходит ...? Конечно, он должен содержать значение даты, выбранной в DatePicker? Особенно учитывая, что именно это отображается в браузере ...
У кого-нибудь есть предложения, что я с этим не так делаю?
Редактировать
Как уже упоминалось в комментариях, я обновил функцию UpdateButton_Click()
следующим образом:
Protected Sub UpdateButton_Click(sender As Object, e As EventArgs) Hanles UpdateButton.Click
If Page.IsPostBack Then
...
Dim mypostdate As String = HttpUtility.HtmlEncode(PostDateTxt.Text & " " & theTime.Text)
Dim postDateAndTimeParts = mypostdate.Split("/")
Dim postTime = postDateAndTimeParts(2).Split("/")
Dim postDay = postDateAndTimeParts(1)
Dim postMonth = postDateAndTimeParts(0)
Dim postYear = postDateAndTimeParts(2).Split(" ")(0)
Dim postHour = postTime.Split(":")(0)
Dim postMin = PostTime.Split(":")(1)
DateTime PostDate = New DateTime(postYear, postMonth, postDay, postHour, postMin, 0);
...
C.updateCaseByCaseID(...)
End If
End Sub
Мое намерение - передать новый объект PostDate
DateTime, который я воссоздаю из String, в вызов C.updateCaseByCaseId(...)
, однако в строке, где я создаю этот объект, в настоящее время я получаю ошибку компиляции что говорит:
Аргументы метода должны быть заключены в скобки
Я не уверен, почему это так? Я не вижу, где мне не хватает скобок ...