Цель: После нажатия на кнопку «Добавить» или «Удалить», сетка данных должна быть обновлена с использованием самых последних данных из документа.
Проблема:
Сетка данных не можетобновляться после внесения изменений путем удаления или добавления новых данных.
Я использую источник привязки, связанный с источником данных datagridview.
Я пробовал все с другим решением и прочитал совет отна другом форуме, но все же я не могу решить эту проблему.
Я также пытался использовать синтаксис «BindingSource.ResetBindings (false)», «BindingSource.Refresh ()» и т. д., но без результата.
Ссылки ниже:
Как обновить источник привязки
http://www.eggheadcafe.com/community/aspnet/2/10114324/datagridview-refresh-from-another-form.aspx
http://blogs.msdn.com/b/dchandnani/archive/2005/03/15/396387.aspx
http://bytes.com/topic/c-sharp/answers/812061-problem-refresh-datagridview
bSrcStock.DataSource = myProductrepository.GetAllProductList(); dgridStock.DataSource = null; dgridStock.DataSource = bSrcStock; bSrcStock.ResetBindings(true); dgridStock.Columns[0].Width = 101; dgridStock.Columns[1].Width = 65; dgridStock.Columns[2].Width = 80; dgridStock.Columns[3].Width = 120; dgridStock.Columns[4].Width = 90;
Я столкнулся с той же проблемой и обнаружил, что проблема заключается в инициализации BindingSource внутри статического конструктора (класс был одноэлементным).Поняв это, я переместил код в вызывающее событие, и он, наконец, сработал без необходимости присваивать значение null или вызывать метод clear.Надеюсь, это поможет.
Нет необходимости определять столбцы (если вы действительно не хотите ...)
Затем просто вызывайте метод refreshDataGridView каждый раз, когда вы добавляете или удаляете что-то из списка ...
public List<CustomItem> ciList = new List<CustomItem>(); CustomItem tempItem = new CustomItem(); tempItem.Name = "Test Name"; ciList.add(tempItem); refreshDataGridView(); private void refreshDataGridView() { dataGridView1.DataSource = typeof(List<>); dataGridView1.DataSource = ciList; dataGridView1.AutoResizeColumns(); dataGridView1.Refresh(); }
Вам необходим список, который будет информировать BindingSource о добавлении элемента и т. Д. Для этого используйте System.ComponentModel.BindingList.
Dim lisItems As New System.ComponentModel.BindingList(Of myObject)
Отлично работает!Отсутствует только AddRange, поэтому он позаботится об этом:
Private Sub AddRange(ByVal lis As List(Of myObject)) For Each itm In lis lisItems.Add(itm) Next End Sub
https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.bindinglist-1?view=netframework-4.7.2