如果第二个单元格为空,如何使单元格只读

时间:2017-10-11 05:41:07

标签: vb.net datagridview

用户不应该在datagridview中输入单位为空的数量。

为清楚起见,如果单位列为空,我想让单元格readonly = true。

colUOM4是列的名称,如果此列的单元格为空,则olNewQty2单元格将是只读的。

我试过这段代码,但它没有工作

 Public Sub UnitEmpty()
    For i As Integer = 0 To dgvCount.RowCount - 1
        If dgvCount.Rows(i).Cells("colUOM4").Value Is Nothing Then
            MessageBox.Show("Its Worked!")
            dgvCount.Rows(i).Cells("colNewQty2").ReadOnly = True
        Else
            MessageBox.Show("Nothing happened!")

            Exit For
        End If
    Next
End Sub

this is my datagridview and the name for it is dgvCount

1 个答案:

答案 0 :(得分:1)

我建议不要使用循环,因为这只会在您执行时设置状态而不会对任何更改做出反应。我建议在行和单元级别工作,即在添加行时设置默认状态,然后在特定单元格发生变化时做出反应,例如

Private Sub DataGridView1_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
    For i = e.RowIndex To e.RowIndex + e.RowCount - 1
        'Make the first cell in each new row read-only by default.
        DataGridView1(0, i).ReadOnly = True
    Next
End Sub

Private Sub DataGridView1_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
    'Check whether the change is in the second column.
    If e.RowIndex >= 0 AndAlso e.ColumnIndex = 1 Then
        Dim row = DataGridView1.Rows(e.RowIndex)

        'Make the first cell in the row read-only if and only if the second cell is empty.
        row.Cells(0).ReadOnly = (row.Cells(1).Value Is Nothing)
    End If
End Sub