Jak*_*ake 9 c# datagridview winforms
我发现了许多类似的问题和答案,但没有人帮助我解决我的问题.
请在下面找到我的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();
}
}
Run Code Online (Sandbox Code Playgroud)
要处理列名称的更改,您可以使用该DataGridView.CellValueChanged事件.该e参数可让您访问:
columnIndex属性,因此您可以测试是否对名称列(索引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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
正如其他人所说,为了checkbox让新添加的行具有禁用状态(特别是如果AllowUserToAddRow属性设置为true),您可以处理该RowAdded事件:
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridView1.Rows[e.RowIndex].Cells[2].ReadOnly = true;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
很旧的线程,但我认为您可以使用CellBeginEdit事件并根据您的条件取消该事件。它不是禁用列,而是取消编辑所需的列值。
1) 订阅事件:
this.dataGridView1.CellBeginEdit += DataGridView1OnCellBeginEdit;
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
我已经使用该事件获得了一个包容性复选框。
这意味着三列中只有一列(“无”,“读取”,“完整”)可以是“真”