我正在使用vb.net应用程序(我对vb.net还是很新的),并且刚刚在表单>> vf_rem(object = Filter(f = exists, x = c("a", "b", "c"))) -> lst_res
>> lst_res
# Shows list
>> $a
NULL
$c
NULL
上的字段中添加了DatePicker
(该字段以前只是一个文本框。
日期选择器似乎在视觉上起作用-当用户在表单字段中单击时,将显示日期选择器日历,他们可以从当前月份中选择一个日期,或切换月份以从另一个月份中选择一个日期。用户选择日期后,日历消失,新选择的日期以mm / dd / yyyy格式显示在字段中。
但是,在调试应用程序时,当我到达PostDate
函数时,该函数正在处理表单中字段的更新(即检查其值是否已更改,并在数据库中更新它们)。他们有),我看到在我添加的行中检查了刚刚添加了DatePicker的date字段的更改,date变量仍然保留了先前的值(即原始日期,而不是新选择的日期) )。
UpdateButton_Click()
函数的定义如下:
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
的调用似乎是在处理数据库更新,最初是在case.vb中用以下命令定义的:
C.updateCaseByCaseID(...)
我将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
但是,尽管现在确实会更新过帐日期字段的值,但它似乎会将其更新为今天的日期,而不是DatePicker选择的日期。这似乎是因为尽管sql = sql & " ReportNumber=@ReportNumber, ..., PostDate=@PostDate, ...
字段在浏览器中显示了新选择的日期,但在PostDate
函数的第
UpdateButton_Click(...)
变量Dim mypostDate As String = HttpUtility.HtmlEncode(PostDate.Text + " " + theTime.Text)
(即在浏览器中显示新选择的日期的表单字段)似乎具有今天的日期值...我不明白为什么会这样...?确定它应该包含在DatePicker中选择的日期的值吗?尤其是考虑到那就是浏览器中正在显示的内容...
有人对此有何建议吗?
修改
如评论中所述,我对PostDate.Text
函数进行了如下更新:
UpdateButton_Click()
我的意图是将要从String重构的新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
DateTime对象传递给PostDate
调用,但是在构造该对象的那一行上,我目前出现编译错误,提示:
方法参数必须用括号括起来
我不确定为什么会这样吗?我看不到哪里缺少括号...