无法设置数据网格视图的行可见false

时间:2013-09-22 08:54:17

标签: c# datagridview datasource

我有一个DataGridView,我设置DataSource

taskerEntities te = new taskerEntities();
var OMsMasterDescriptiveIndicators = te.MyTable.Select(x => new lccls {Id = x.Id, name = x.name }).ToList();
MyGrid.DataSource = OMsMasterDescriptiveIndicators;

class lccls作为

public class lccls
    {
        public string Id { get; set; }
        public Nullable<decimal> name { get; set; }
    }

在某个特定事件中,我想让当前行不可见:

 MyGrid.Rows[5].Visible = false;

但我无法做到这一点。而是抛出异常,并显示以下错误消息:

  

无法与货币经理的头寸相关联的行   隐形

我怀疑原因与设置DataSource有关,但为什么?

7 个答案:

答案 0 :(得分:42)

经过大量搜索后,我得到了solution

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

答案 1 :(得分:9)

当前行索引时,无法将yourDataGridView行的visible属性设置为false 如果试图隐藏当前单元格会遇到这样的错误

soulution:

当yourDataGridView数据源不为空时

  CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
                       currencyManager1.SuspendBinding();
                       yourDataGridView.Rows[Target Index].Visible = false;
                       currencyManager1.ResumeBinding();
当yourDataGridView数据源为null时

 yourDataGridView.CurrentCell = null;
 yourDataGridView.Rows[Target Index].Visible = false;

答案 2 :(得分:1)

我有一个U的例子。我有一个datagridview可能是多选行。当我单击按钮以显示选中的假行时。试试这个:

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
        {
            CurrencyManager currencyManager1 =(CurrencyManager)BindingContext[dataGridView1.DataSource];
                currencyManager1.SuspendBinding();
                dataGridView1.CurrentCell = null;
                row.Visible = false;
        }
        dataGridView1.Refresh();

请记住设置属性SelectionMode:FullRowSelect

答案 3 :(得分:1)

示例

        foreach (DataGridViewRow rw in dataGridView1.Rows)
        {

        if (rw.Cells[14].Value.ToString() == "") // this Cell have a TEXT, 
            {
                CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
                currencyManager1.SuspendBinding();
                rw.Visible = false; 
                currencyManager1.ResumeBinding();

            }
        }

此仅显示单元格索引为14的行,如果为空白或为空,则整个行均不显示

答案 4 :(得分:0)

回答这个主题可能有点晚了,但是我建议您使用DataTable.DefaultView.RowFilter 属性以过滤您需要在有界DataGridView上显示的内容。请检查以下链接以获取更多信息:  https://docs.microsoft.com/en-us/dotnet/api/system.data.dataview.rowfilter?redirectedfrom=MSDN&view=netframework-4.8#System_Data_DataView_RowFilter

致谢。

答案 5 :(得分:0)

我知道这是一个古老的话题,但是是一个替代解决方案(我的代码是vb.net,但我认为它会翻译)

root

答案 6 :(得分:0)

我试图在 CellFormating 事件中隐藏一行,但没有成功。看起来货币管理器不能为引发事件的行暂停,而不是我之前处理该行(第 0 行处理最后一行)

Private Sub DgView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DgView1.CellFormatting
        If DgView1.Rows(e.RowIndex).Cells(e.ColumnIndex).OwningColumn.Name = CoID Then
            Dim k = If(e.RowIndex = 0, DgView1.RowCount - 1, e.RowIndex - 1)
            DgView1.Rows(k).Visible = Countries.Rows(k)("Ro")
        End If
End Sub