vb.net DatePicker не устанавливает значение при выборе новой даты - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над приложением 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(...), однако в строке, где я создаю этот объект, в настоящее время я получаю ошибку компиляции что говорит:

Аргументы метода должны быть заключены в скобки

Я не уверен, почему это так? Я не вижу, где мне не хватает скобок ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...