1 使用 ReadOnly 属性
 如果希望, DataGridView 内所有单元格都不可编辑, 那么只要: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />[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 [0 0] 单元格为只读
DataGridView1(0, 0).ReadOnly =  True

 

[C#]
// 设置 DataGridView1 的第 2 列整列单元格为只读
DataGridView1.Columns[1].ReadOnly =  true ;

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

// 设置 DataGridView1 [0 0] 单元格为只读
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 ;
    }
}