1 使用 ReadOnly 属性
 如果希望,DataGridView 内所有单元格都不可编辑, 那么只要:
[VB.NET]
设置 DataGridView1 为只读
DataGridView1.ReadOnly = True
 
[C#]
// 设置 DataGridView1 为只读
DataGridView1.ReadOnly = true;
此时,用户的新增行操作和删除行操作也被屏蔽了。

 如果希望,DataGridView 内某个单元格不可编辑, 那么只要:
[VB.NET]
' 设置 DataGridView1 的第2列整列单元格为只读
DataGridView1.Columns(1).ReadOnly = True

' 设置 DataGridView1 的第3行整行单元格为只读
DataGridView1.Rows(2).ReadOnly = True

' 设置 DataGridView1 [00]单元格为只读
DataGridView1(0, 0).ReadOnly = True
 
[C#]
// 设置 DataGridView1 的第2列整列单元格为只读
DataGridView1.Columns[1].ReadOnly = true;

// 设置 DataGridView1 的第3行整行单元格为只读
DataGridView1.Rows[2].ReadOnly = true;

// 设置 DataGridView1 [00]单元格为只读
DataGridView1[0, 0].ReadOnly = true;

2
使用 EditMode 属性
DataGridView.EditMode
属性被设置为 DataGridViewEditMode.EditProgrammatically 时,用户就不能手动编辑单元格的内容了。但是可以通过程序,调用 DataGridView.BeginEdit 方法,使单元格进入编辑模式进行编辑。
[VB.NET]
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically
 
[C#]
DataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;

3
根据条件设定单元格的不可编辑状态
当一个一个的通过单元格坐标设定单元格 ReadOnly 属性的方法太麻烦的时候,你可以通过 CellBeginEdit 事件来取消单元格的编辑。
[VB.NET]
'CellBeginEdit 事件处理方法
Private Sub DataGridView1_CellBeginEdit(ByVal sender As Object, _
        
ByVal e As DataGridViewCellCancelEventArgs) _
        
Handles DataGridView1.CellBeginEdit
    
Dim dgv As DataGridView = CType(sender, DataGridView)
    
' 是否可以进行编辑的条件检查
    If dgv.Columns(e.ColumnIndex).Name = "Column1" AndAlso _
        
Not CBool(dgv("Column2", e.RowIndex).Value) Then
        
' 取消编辑
        e.Cancel = True
    
End If
End Sub
 
[C#]
// CellBeginEdit 事件处理方法
private void DataGridView1_CellBeginEdit(object sender,
    DataGridViewCellCancelEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    
//是否可以进行编辑的条件检查
    if (dgv.Columns[e.ColumnIndex].Name == "Column1" &&
        !(
bool)dgv["Column2", e.RowIndex].Value)
    {
        
// 取消编辑
        e.Cancel = true;
    }
}