c# - 如何根据其他单元格中的值禁用(只读)DataGridView CheckBox 列中的单元格?

标签 c# winforms datagridview

我发现了很多类似的问题和答案,但没有一个能帮助我解决问题。

请在下面找到我的DataGridView

enter image description here

我想做的是,如果 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/

相关文章:

c# - 上下文菜单 Shell 扩展在 Windows 7 64 位下不起作用

c# - 如何更改按钮的大小

c# - C# 用户控件中的滚动条

c# - 允许在 dataGridview 中选择行但不允许选择单元格

c# - DataGridView 控件必须绑定(bind)到要排序的 IBindingList 对象

c# - datagridview 中的按键事件?

c# - Pcap .NET 库 : PcapDotNet. Core.DLL 未找到

c# - 错误绑定(bind) isEnabled 到 xaml 中的按钮

c# - 如何验证不同格式的日期

c# - 使用 Include 进行 Linq 分组