在数据源是绑定源的 Datagridview 中隐藏列

Hiding Column In a Datagridview which's data source is a binding source

我在我的表单中使用了一个 datagridview,它的数据源是一个绑定源控件。在绑定源控件的当前更改事件中,我试图隐藏 datagridview 中的行。然后我得到以下错误,

Row associated with the currency manager's position cannot be made invisible.

我使用的代码如下,

rowClicked = reportsBindingSource.Position
for (int i = 0; i < dgvItems.Rows.Count; i++)
                {
                    try
                    {
                        if (rowClicked != i)
                        {

                            dgvItems.Rows[i].Visible = false;
                        }

                    }
                    catch (Exception)
                    {

                        throw;
                    }

                }

代码有什么问题?我尝试使用下面的但没有任何效果,

CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dgvItems.DataSource];
                   currencyManager1.SuspendBinding();
                   dgvItems.Rows[i].Visible = false;
                   currencyManager1.ResumeBinding();

dgvItems.CurrentCell= null
dgvItems.Rows[i].Visible = false;

有解决办法吗?

好吧,如异常所示,数据绑定模式不支持隐藏行。所以为了达到你的目的,你应该使用一些数据绑定机制。

从数据绑定的角度来看,"hiding"行相当于过滤源列表。由于 BindingSource 组件既可以作为单项数据源,也可以作为列表数据源,最简单的方法是使用包含主要来源 Current 的中间 BindingSource,如下所示:

BindingSource bindingSource; // Your current component used as DataSource for the dataGridView

var currentSource = new BindingSource { DataSource = bindingSource.Current };
dataGridView.DataSource = currentSource;
bindingSource.CurrentChanged += (_sender, _e) => currentSource.DataSource = bindingSource.Current;