试图隐藏行在我的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函数的可重入调用。
嗯,正如人们所评论的那样,看起来发布的代码不是问题。在我的代码中的其他东西导致这个不工作。
这是我最终修复它的方法。
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();
}));