如何通过复选框启用和禁用DataGridView中的特定行?

时间:2015-04-09 04:38:56

标签: c# winforms datagridview

我试图通过检查和取消选中gridview中的复选框来启用和禁用DataGridView中的特定行。 (C#Windows应用程序)

我尝试使用未按预期工作的CellClick事件。

这是我试过的代码

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == 0 && dataGridView1.CurrentCell.Selected == true)
    {

        dataGridView1.Columns[3].ReadOnly = false;

    }

}

请告诉我怎么做。

提前致谢

3 个答案:

答案 0 :(得分:4)

我认为你错过了 CellContentClick 事件,试试这个:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{          
     if (e.ColumnIndex == dataGridView1.Columns["Your Column Name"].Index) //To check that we are in the right column
     {
          dataGridView1.EndEdit();  //Stop editing of cell.
          if ((bool)dataGridView1.Rows[e.RowIndex].Cells["Your Column Name"].Value)
          {
             //dataGridView1.Columns[3].ReadOnly = true;// for entire column 
               int colIndex = e.ColumnIndex;
               int rowIndex = e.RowIndex;
               dataGridView1.Rows[colIndex].Cells[rowIndex].ReadOnly = true;
          }
    }
}

答案 1 :(得分:2)

你可以简单地使用dataGridView" CellContentClick"事件。代码如下所示。

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var _dataGrid = (DataGridView)sender;

    //Give your checkbox column Index
    int chkBoxColumnIndex = 1;

    if (e.ColumnIndex == chkBoxColumnIndex && e.RowIndex >= 0)
    {
        bool isChecked = _dataGrid[chkBoxColumnIndex, e.RowIndex].Value == null ? false : (bool)_dataGrid[chkBoxColumnIndex, e.RowIndex].Value;
        for (int i = 0; i < dataGridView1.Columns.Count; i++)
        {
            _dataGrid[i, e.RowIndex].ReadOnly = isChecked;
        }
    }
}

答案 2 :(得分:0)

好吧,你将readonly属性设置为false意味着它不是只读的。尝试将其设置为true。触发此事件的事件也应该是复选框点击事件(双击复选框以创建事件处理程序)。

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    dataGridView1.Columns[3].ReadOnly = true;
}

另外,看看冻结的财产。

dataGridView1.Columns[3].Frozen = true;