我在父表单上有一个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
}
答案 0 :(得分:0)
我认为您不能像现在这样处理列名,因为列名SelectdGV
是DataGridView
对象的内部名称。当您尝试在代码中使用变量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
}