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

时间:2016-12-16 11:01:57

标签: c# winforms datagridview bindingsource

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

  

与货币经理的头寸相关联的行不能隐藏。

我使用的代码如下,

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;

有没有解决方案?

1 个答案:

答案 0 :(得分:0)

嗯,如异常所示,数据绑定模式不支持隐藏行。因此,为了实现您的目标,您应该使用一些数据绑定机制。

从数据绑定的角度来看,“隐藏”行相当于过滤源列表。由于BindingSource组件可以同时充当单个项目和列表数据源,因此最简单的方法是使用包含主要来源的BindingSource的中间Current,如下所示:

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;