在数据源是绑定源的 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;
我在我的表单中使用了一个 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;