由于级别保护,无法访问DataGridViewCheckBoxColumn

时间:2017-01-17 00:43:14

标签: c# datagridview

我在父表单上有一个DataGridView(dGVProductos),我添加了一个CheckBoxColumn(SelectdGV),我输入DataGridView属性 - 修饰符 - 公共,但当我尝试在Form儿子中使用它,它告诉我由于其保护级别我无法访问它。我尝试使用它的方法是Form Son上的Eliminar()。 SelectdGV显示为红线,不允许我编译它。

public override void Eliminar()
{
    List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
    foreach (DataGridViewRow row in dGVProductos.Rows)
    {
        if (Convert.ToBoolean(row.Cells[SelectdGV.Name].Value) == true)
        {
            rows_with_checked_column.Add(row);
        }
    }
// Do what you want with the check rows
}

1 个答案:

答案 0 :(得分:0)

我认为您不能像现在这样处理列名,因为列名SelectdGVDataGridView对象的内部名称。当您尝试在代码中使用变量SelectdGV时,如果不引用DataGridView dGVProductos,将无法访问该变量。要解决此问题并按照代码的使用方式使用它,您可以更改if条件,如下所示:

if (Convert.ToBoolean(row.Cells[dGVProductos.Columns[2].Name].Value) == true) {

其中&#34; 2&#34;是您要搜索的列号。这意味着您不知道列名是什么,但它位于第3列。此更改将使您的代码正常工作。但是,由于您知道列名...只需使用下面的列字符串“name”值来标识复选框列,它应该可以正常工作。如果DataGridView允许用户添加行,我添加了一个检查以忽略添加的新行。希望这会有所帮助。

public void Eliminar() {
  List<DataGridViewRow> rows_with_checked_column = new List<DataGridViewRow>();
  foreach (DataGridViewRow row in dGVProductos.Rows) {
    if (!row.IsNewRow) {
      if (Convert.ToBoolean(row.Cells["SelectdGV"].Value) == true) {
        rows_with_checked_column.Add(row);
        MessageBox.Show("Row: " + row.Cells[0].Value + ", " + row.Cells[1].Value + ", " + row.Cells[2].Value);
      }
    }
  }
  // Do what you want with the check rows
}