如何使Datagridview可编辑并将其更改为数字格式?

时间:2016-07-25 03:49:46

标签: vb.net datagridview

早上好。

我在表单中有一个Datagridview,它在数据库中连接,看起来像这样。

enter image description here

我对这部分没有任何问题。

我的问题是这样的。如何使第四列可编辑?我的意思是我可以点击这个属性来编辑它

enter image description here

现在输出将是这样的。

enter image description here

现在这是真正的问题,我将根据我的系统将要执行的流程提出一个问题。

1.第4列是可编辑的列,其余列将被锁定或不可编辑

2.可以说我将48当我离开牢房时如何才能48.00?这种格式最后是.00。

3.无法在第4栏输入字母。

TYSM未来的帮助

3 个答案:

答案 0 :(得分:1)

  1. 为任何不属于您的列设置ReadOnly属性为True 希望用户能够编辑。
  2. 将列的DefaultCellStyle.Format属性设置为“n2”或“f2”。
  3. 我可能会反对这一点,因为你想要包含一个小数点的事实使它更复杂。如果您决定继续,那么您应该研究如何仅允许常规TextBox中的数字输入,因为这将以完全相同的方式工作。您只需要通过网格的相应事件处理程序访问用于编辑的TextBox控件。
  4. 在下面的示例中,由于editingTextBox字段已声明为WithEvents,因此最后一个方法将处理编辑控件的TextChanged事件,同时将其分配给该字段编辑会议。

    Private WithEvents editingTextBox As TextBox
    
    Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
        Me.editingTextBox = DirectCast(e.Control, TextBox)
    End Sub
    
    Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
        Me.editingTextBox = Nothing
    End Sub
    
    Private Sub editingTextBox_TextChanged(sender As Object, e As EventArgs) Handles editingTextBox.TextChanged
        '...
    End Sub
    

答案 1 :(得分:0)

将其他列设置为readonly = true且数字列= false,并将数字列的defaultcellstyle.format设置为" ###,## 0.00"在您的datagridview的cellvalidating事件中,执行ff:

Private Sub DatagridView1_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DatagridView1.CellValidating
    Try
        If DatagridView1.IsCurrentCellDirty Then
            Select Case DatagridView1.Columns(e.ColumnIndex).Name.ToUpper
                Case "<NAME OF YOUR NUMERIC COLUMN>"
                    If Not IsNumeric(e.FormattedValue) Then
                        MsgBox("Invalid value.")
                        e.Cancel = True
                        Exit Sub
                    End If

                    If CType(e.FormattedValue, Integer) < 0 Then
                        MsgBox("Invalid value.")
                        e.Cancel = True
                        Exit Sub
                    End If
            End Select
        End If
    Catch ex As Exception
        ErrMsg(ex)
    End Try
End Sub

答案 2 :(得分:-1)

Private Sub dgvwithdraw_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvwithdraw.CellClick
    Select Case dgvwithdraw.Columns(e.ColumnIndex).Name
        Case "Select", "Alloted"
            dgvwithdraw.ReadOnly = False
        Case Else
            dgvwithdraw.ReadOnly = True
    End Select
End Sub