我发现了许多类似的问题和答案,但没有人帮助我解决我的问题。
请在下面找到我的dataGridView,
我想要做的是在运行时名称单元格为空时禁用复选框。
我尝试了可能的方法,但是在我检查后,单元格一直被禁用(只读)。
修改
我尝试过这样的事情,
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();
}
}
答案 0 :(得分:8)
要处理列名称中的更改,您可以使用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
),您可以处理{{1 event:
RowAdded
答案 1 :(得分:3)
您可以使用DataGridView.CellValueChanged事件:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
if (e.ColumnIndex == 1 && dataGridView1[1, e.RowIndex].Value.ToString() != "")
dataGridView1[2, e.RowIndex].ReadOnly = false;
else
dataGridView1[2, e.RowIndex].ReadOnly = true;
}
}
但是为了让复选框首先处于禁用状态,请确保使用设计器将列设置为ReadOnly,并且在DataGridView.RowsAdded事件中,为新创建的行设置checkbox属性ReadOnly = true: / p>
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
dataGridView1[2, e.RowIndex].ReadOnly = true;
}
答案 2 :(得分:3)
相当旧的帖子,但我认为您可以使用CellBeginEdit事件并根据您的情况取消事件。它不是禁用列,而是取消编辑所需的列值。
1)订阅活动:
this.dataGridView1.CellBeginEdit += DataGridView1OnCellBeginEdit;
2)事件处理程序:
private void DataGridView1OnCellBeginEdit(object sender, DataGridViewCellCancelEventArgs args)
{
var isTicked = this.dataGridView1.Rows[args.RowIndex].Cells[args.ColumnIndex].Value;
args.Cancel = (isTicked is bool) && ((bool)isTicked);
}
我已使用该事件获得一个包含性复选框。
这意味着三列中只有一列("无","读","全")可以是" true"
答案 3 :(得分:1)
简单,在Visual Studio中有内置的只读属性,将其标记为true