2016-12-16 14 views
0

Я использую datagridview в своей форме, источником данных которого является элемент управления привязкой. В текущем измененном событии элемента управления привязкой я пытаюсь скрыть строки в 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

@ Иван Стоев Я хотел скрыть все строки, кроме выбранного, в текущем измененном событии источника привязки –

+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; 
+0

Это решит проблему, особенно в моем случае, но, как вы сказали, загрузка datagridview только одним элементом не является чем-то значительным. Я думаю о других решениях –