C#:DataGridViewCheckBoxCell奇怪的行为

时间:2012-02-15 18:42:32

标签: c# datagridview datagridviewcheckboxcell

  

可能重复:
  DataGridViewCheckBoxCell how to show checked when set during form load

我在C#-WinForms项目中遇到DataGridView问题。

我用本地数据库中的数据填充它。另外,我添加了一个未绑定到任何数据的CheckBoxColumn。我使用它来根据选中的行过滤ListBox。这一切都放在对话框表格上的TabControl的第二页上,并且运行正常。

现在我想以编程方式选择基于打开表单时传递的字符串列表的行。我试过这段代码:

foreach (string pre in preselect)
{
    foreach (DataGridViewRow row in dgvProtFunc.Rows)
    {
        if ((string)row.Cells[2].Value == pre)
        {
            ((DataGridViewCheckBoxCell)row.Cells[0]).Value = true;
        }
    }
}

设置值然后触发的过滤适用于formload。但是,不会选中复选框。检查一个时,所有其他值都将丢失。这很糟糕,因为我必须使用这样的预选。这些是另一个DataGridView事件处理程序:

private void dgvProtFunc_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dgvProtFunc.IsCurrentCellDirty)
    {
        dgvProtFunc.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

private void dgvProtFunc_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (!FormLoadCheck)
    {
        string data = string.Empty;
        ptSelectList.Clear();
        foreach (DataGridViewRow row in dgvProtFunc.Rows)
        {
           if (row.Cells[0].Value != null && Convert.ToBoolean(row.Cells[0].Value) == true)
           {
               ptSelectList.Add(Convert.ToInt32(row.Cells[1].Value));
           }
           data += row.Cells[0].Value;
        }
        ptSelectList.Sort();
        FilterRelais(ptSelectList.ToArray());
        MessageBox.Show(data);
   }
}

任何人都可以解释这种行为吗?任何解决方案?

0 个答案:

没有答案