VB.NET如何实现StartTime为空时禁用任务完成按钮
VB.NET任务管理程序需求实现方案
核心逻辑
在完成按钮点击事件执行更新操作前,增加选中任务的StartTime字段空值校验,若字段为空则直接终止操作,不执行数据库更新。
具体代码修改
你只需要修改Button1_Click(完成按钮点击事件)的代码即可,完整修改后代码如下:
'complete button Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' 先判断是否选中有效行 If DataGridView1.CurrentRow Is Nothing OrElse DataGridView1.CurrentRow.Index < 0 Then MsgBox("请先选中要操作的任务!", MsgBoxStyle.Exclamation, "提示") Return End If ' 获取当前选中行的StartTime字段值,用列名取值更稳妥,不受列顺序调整影响 Dim startTimeVal = DataGridView1.CurrentRow.Cells("StartTime").Value ' 判断StartTime是否为空值(数据库空值或空字符串) If IsDBNull(startTimeVal) OrElse String.IsNullOrWhiteSpace(startTimeVal?.ToString()) Then MsgBox("未开始的任务无法标记为完成,请先点击开始任务!", MsgBoxStyle.Exclamation, "操作禁止") Return End If ' 原有更新逻辑保持不变 Dim con As New SqlConnection("Data Source=ICECANDY;Initial Catalog=RestaurantDatabase;integrated security=true") Dim query As String = "update Tasks set FinishTime=@FinishTime,Status=@Status where TaskID=@id" con.Open() cmd = New SqlCommand(query, con) cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = LabelID.Text cmd.Parameters.Add("@FinishTime", SqlDbType.VarChar).Value = Label1.Text cmd.Parameters.Add("@Status", SqlDbType.VarChar).Value = comboboxstatus.Text cmd.ExecuteNonQuery() con.Close() MsgBox("Successfully updated!") refreshDGV() End Sub
额外优化建议(可选)
你也可以在DataGridView1_CellClick选中行的事件里同步判断StartTime值,动态控制完成按钮的可用状态,提前给用户操作提示:
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick If e.RowIndex < 0 Then Return Dim i As Integer = e.RowIndex Me.LabelID.Text = DataGridView1.Item(0, i).Value ' 动态控制完成按钮是否可用 Dim startTimeVal = DataGridView1.Rows(i).Cells("StartTime").Value Button1.Enabled = Not (IsDBNull(startTimeVal) OrElse String.IsNullOrWhiteSpace(startTimeVal?.ToString())) End Sub
内容的提问来源于stack exchange,提问作者Andre' Bella
相关产品推荐
相关产品推荐

