Не удается обновить обзор данных с помощью источника привязки - PullRequest
8 голосов
/ 14 марта 2011

Цель:
После нажатия на кнопку «Добавить» или «Удалить», сетка данных должна быть обновлена ​​с использованием самых последних данных из документа.

Проблема:

Сетка данных не можетобновляться после внесения изменений путем удаления или добавления новых данных.

Я использую источник привязки, связанный с источником данных 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;

Ответы [ 3 ]

2 голосов
/ 10 мая 2012

Я столкнулся с той же проблемой и обнаружил, что проблема заключается в инициализации BindingSource внутри статического конструктора (класс был одноэлементным).Поняв это, я переместил код в вызывающее событие, и он, наконец, сработал без необходимости присваивать значение null или вызывать метод clear.Надеюсь, это поможет.

1 голос
/ 08 апреля 2012

Нет необходимости определять столбцы (если вы действительно не хотите ...)

Затем просто вызывайте метод 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();
    }
0 голосов
/ 24 ноября 2018

Вам необходим список, который будет информировать 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

...