【问题标题】:VB.Net DateTimePicker NULL valueVB.Net DateTimePicker NULL 值
【发布时间】:2014-04-23 08:23:28
【问题描述】:

我正在使用 vb.net 从 sql server 数据库加载数据。一张表有数据时间列。我使用 bindingsource 将控件绑定到列。这就是我将 datetimepicker 绑定到数据列的方式:

 returnDateDateTimePicker.DataBindings.Add(New Binding("value", bsRegister, "returnDate"))

此日期时间选择器中显示了复选框。

当我打开表单时,如果该列的日期时间值不为空或为空,则数据将正确显示并且复选框将被选中。

现在,当我想将返回日期设置为 null 以保存到数据库时,它不会将其保存为 null!

我尝试按如下方式解决它:

Private Sub ReturnDateDateTimePicker_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ReturnDateDateTimePicker.MouseUp
    Try
        If ReturnDateDateTimePicker.Checked = True Then
            ReturnDateDateTimePicker.CustomFormat = "dd-MMM-yyyy hh:mm tt"
        Else
            ReturnDateDateTimePicker.CustomFormat = "    -- 'Select Date' --  "
        End If
    Catch ex As Exception
        MsgBox(Err.Description)
    End Try
End Sub

当我取消选中 datetimepicker 时,文本将更改为 '-- Select Date --'。

我认为这会解决问题,但 returnDate 总是有一个值! 我的代码有什么问题以及解决方案是什么?

【问题讨论】:

标签: vb.net null datetimepicker


【解决方案1】:

我刚刚解决了同样的问题,就是如何让在职员工的离职日期为空值(因为他们仍在公司工作)。

我用 VS 2017 做了一个小程序,它是 VB.Net 语言,老板让我准备员工列表程序,并在数据库中完成他们的加入日期和离职日期。

当我输入活跃的员工数据时,这对我来说是个问题,因为我无法填写辞职日期(他们仍在工作)并且 VB 不允许 datetimepicker 具有空值。

请参考我的代码查看解决方案;我只添加一个对象来捕获空值并将其作为指定日期发送到数据库。

Private Sub btnsave_Click(sender As Object, e As EventArgs) _
        Handles btnsave.Click

        Dim exresigndate As String = ""

        If rbactive.Checked = True Then
            status = rbactive.Text
            exresigndate = "Null"
        ElseIf rbresigned.Checked = True Then
            status = rbresigned.Text
            exresigndate = "@ResignDate"
        End If


        Try
            Call SearchEmpID()
            If Not DR.HasRows Then
                Call connection()
                Dim CMD As SqlCommand
                Dim SQL As String

                SQL = "INSERT INTO Employee VALUES (@EmpID, @EmpName, @DeptName, @EmpStatus, @JoinDate, " & exresigndate & ", @Address, @Photo)"
                CMD = New SqlCommand(SQL, CONN)
                CMD.Parameters.AddWithValue("@EmpID", txtid.Text)
                CMD.Parameters.AddWithValue("@EmpName", txtname.Text)
                CMD.Parameters.AddWithValue("@DeptName", cmbdept.Text)
                CMD.Parameters.AddWithValue("@EmpStatus", status)
                CMD.Parameters.AddWithValue("@JoinDate", Format(dtpjoin.Value, "MM-dd-yyyy"))
                If rbresigned.Checked = True Then
                    CMD.Parameters.AddWithValue("@ResignDate", Format(dtpresigned.Value, "MM-dd-yyyy"))
                End If
                CMD.Parameters.AddWithValue("@Address", txtaddress.Text)
                Dim MemoryStream As New MemoryStream
                PictureBox1.BackgroundImage.Save(MemoryStream,
                    PictureBox1.BackgroundImage.RawFormat)
                Dim Dphoto As Byte() = MemoryStream.GetBuffer
                Dim Images As New SqlParameter("@Photo", SqlDbType.Image)
                Images.Value = Dphoto
                CMD.Parameters.Add(Images)
                CMD.ExecuteNonQuery()
            Else
                Call koneksi()
                Dim CMD As SqlCommand
                Dim SQL As String
                SQL = "UPDATE Employee SET EmpName='" & txtname.Text & "',DeptName='" & cmbdept.Text & "',EmpStatus='" & status & "',JoinDate='" & Format(dtpjoin.Value, "MM-dd-yyyy") & "', ResignDate='" & Format(dtpresigned.Value, "MM-dd-yyyy") & "', Address='" & txtaddress.Text & "' ,Photo='" & SqlDbType.Image & "' where EmpID='" & txtid.Text & "'"
                CMD = New SqlCommand(SQL, CONN)
                CMD.ExecuteNonQuery()
                MsgBox("Saved")
            End If
            TextBox1.Clear()
            PictureBox1.Image = Nothing
            CMD.Dispose()
            CONN.Close()
            Call Awal()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

我有两个 dateTimePickers ,一个用于加入日期,另一个用于辞职日期。 每个 datetimepicker 都将根据他们的就业状态(无论是活跃还是辞职)被激活,并且它们将通过以下代码启用或禁用:

 If rbactive.Checked = True Then
 status = rbactive.Text
 exresigndate = "Null"
 ElseIf rbresigned.Checked = True Then
 status = rbresigned.Text
 exresigndate = "@ResignDate"
 End If

*rb=单选按钮 在上面的单选按钮代码中,我将 exresigndate 描述为 String 并给出 null 值。

Dim exresigndate As String = ""

所以我可以在下面的代码中调用它。

然后我将 exresigndate 放入 insert syntak 以填充 ResignDate 字段。

SQL = "INSERT INTO Employee VALUES (@EmpID, @EmpName, @DeptName, @EmpStatus, @JoinDate, " & exresigndate & ", @Address, @Photo)"

之后,我给出条件调用exrisgndate(null value) 为在职员工和ResignDate 值为dtreigned.value 为辞职员工。

更多解释请看input form

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    相关资源
    最近更新 更多