Невозможно Установить строку, видимую ложью для datagridview

У меня есть 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, но почему?

Ответ 1

После многого поиска я получил решение

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

Ответ 2

Невозможно установить видимое свойство строки вашегоDataGridView в значение false, если индекс текущей строки Будете встречать такую ​​ошибку, если пытаетесь скрыть текущую ячейку

soulution:

, если источник данных DataGridView не равен null:

  CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
                       currencyManager1.SuspendBinding();
                       yourDataGridView.Rows[Target Index].Visible = false;
                       currencyManager1.ResumeBinding();

, когда ваш источник данных DataDataGridView равен null:

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

Ответ 3

У меня есть пример для 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

Ответ 4

Пример

        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, если это поле пустое или пустое, не отображается вся строка

Ответ 5

спасибо за решение. оценили.

Ответ 6

Может быть, немного поздно, чтобы ответить на эту тему, но я предлагаю вам использовать 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

С уважением.