我发现了很多类似的问题和答案,但没有一个能帮助我解决问题。
请在下面找到我的DataGridView
我想做的是,如果 name 单元格在运行时为空,则禁用该复选框。
我尝试了很多方法,但在我检查之后,单元格一直处于禁用状态(只读)。
我试过这样的:
private void sendDGV_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (sendDGV.CurrentRow.Cells[1].Value != null)
{
sendDGV.CurrentRow.Cells[2].ReadOnly = false;
sendDGV.Update();
}
else
{
sendDGV.CurrentRow.Cells[2].ReadOnly = true;
sendDGV.Update();
}
}
最佳答案
要处理 name 列中的更改,您可以使用 DataGridView.CellValueChanged
事件。 e
参数允许您访问:
columnIndex
属性,因此您可以测试是否对 name 列(索引 1)进行了更改。rowIndex
属性,因此您可以检索相关行并更改所需的值。
private void DataGridView1_CellValueChanged(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
//second column
if (e.ColumnIndex == 1) {
object value = DataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
if (value != null && value.ToString() != string.Empty) {
DataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = false;
} else {
DataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
}
}
}
编辑
正如其他人所指出的,为了对新添加的行禁用 checkbox
(特别是如果 AllowUserToAddRow
属性设置为 true
),你可以处理 RowAdded
事件:
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
}
关于c# - 如何根据其他单元格中的值禁用(只读)DataGridView CheckBox 列中的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18616701/