我在我的表单中使用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;
有没有解决方案?
答案 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;