【问题标题】:wrong index of checkbox column in datagrid数据网格中复选框列的错误索引
【发布时间】:2015-12-22 00:52:34
【问题描述】:

我有这段代码在第三个位置添加一个复选框列,但是这个列(bloqueador)的索引是0而不是3。有什么问题?

public void bloqselect()
{
 DataGridViewCheckBoxColumn chkSelect = new DataGridViewCheckBoxColumn();
 chkSelect.Selected = false;
 chkSelect.HeaderText = "Bloqueador";
 chkSelect.Name = "chkSelect";
 grid_lic.Columns.Insert(3, chkSelect);

 if (chkSelect.Selected == true)

    bloqueador = 1;
  else
   bloqueador = 0;
}

checkbox column index

【问题讨论】:

    标签: checkbox datagridview


    【解决方案1】:

    这是一个关于每个人都很难学习的列的加载顺序的怪癖。当您将数据绑定到 DataGridView 时,列及其索引将在 Form 构造函数完成运行后解析 - 始终。这不适用于手动添加的列 - 它们会立即解决。

    为什么这很重要?假设您有一个数据源,它将解析为FooBarBaz 列。然后将列 Add 插入位置 2。执行此操作的代码可能如下所示:

    dataGridView.DataSource = GetFooBarBazSource();
    dataGridView.Columns.Insert(2, theAddColumn);
    

    列索引将直接取决于何时您运行此代码 - 在表单构造函数中或之后(假设在Form.Load):

                     ╔═════╦═════╦═════╦═════╗
                     ║ Foo ║ Bar ║ Add ║ Baz ║
                     ╠═════╬═════╬═════╬═════╣
    Form Constructor ║ 1   ║ 2   ║ 0   ║ 3   ║
    Form_Load()      ║ 0   ║ 1   ║ 2   ║ 3   ║
                     ╚═════╩═════╩═════╩═════╝
    

    如果您想按预期修复索引顺序,只需为Form.Loadgrid_lic.DataBindingComplete 添加一个事件处理程序,然后在该处理程序中调用bloqselect()

    【讨论】:

    • 感谢您的回答,实际上我正在考虑用添加复选框列提供的新索引替换单元格索引,但我选择了另一种解决方案来包含复选框列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2020-12-16
    • 2011-01-24
    相关资源
    最近更新 更多