试图隐藏行在我的DataGridView当bool更改为true

本文关键字:bool true DataGridView 隐藏 我的 | 更新日期: 2023-09-27 18:16:03

我在SO上看到了一些关于这个主题的问题,但是提议的修复在我的代码中没有变化。

这是我的。

    public void cell_formatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e)
    {
     //lots of work
         if (dataGridView.Columns[e.ColumnIndex].Name.Equals("Helped"))
        {
            if (e.Value.Equals(true))
            {
                CurrencyManager cm = (CurrencyManager)dataGridView.BindingContext[dataGridView.DataSource];
                cm.SuspendBinding();
                dataGridView.Rows[e.RowIndex].Visible = false; //Error here
                cm.ResumeBinding();
            }

附加信息:不能使与货币管理器位置相关联的行不可见。

上面几乎是对大多数其他用户的逐字修复,猜猜为什么它不适合我?

编辑:

我已经添加了一个新的行来清除CurrentCell,现在提供一个新的错误;

            if (dataGridView.Columns[e.ColumnIndex].Name.Equals("Helped"))
        {
            if (e.Value.Equals(true))
            {
                CurrencyManager cm = (CurrencyManager)dataGridView.BindingContext[dataGridView.DataSource];
                cm.SuspendBinding();
                dataGridView.CurrentCell = null;
                dataGridView.Rows[e.RowIndex].Visible = false;
                cm.ResumeBinding();
            }
        }

操作无效,因为它会导致对SetCurrentCellAddressCore函数的可重入调用。

试图隐藏行在我的DataGridView当bool更改为true

嗯,正如人们所评论的那样,看起来发布的代码不是问题。在我的代码中的其他东西导致这个不工作。

这是我最终修复它的方法。

            if (dataGridView.Columns[e.ColumnIndex].Name.Equals("Helped"))
        {
            if (e.Value.Equals(true))
            {
                CurrencyManager cm = (CurrencyManager)dataGridView.BindingContext[dataGridView.DataSource];

                this.BeginInvoke(new MethodInvoker(() =>
                {
                    cm.SuspendBinding();
                    dataGridView.Rows[e.RowIndex].Visible = false;
                    RemoveRecord(dataGridView.Rows[e.RowIndex].DataBoundItem as Record);
                    cm.ResumeBinding();
                }));