无法使用bindingsource刷新datagridview

时间:2011-03-14 20:18:54

标签: c# datagridview bindingsource

目标:
单击“添加”或“删除”按钮后,应使用文档中的最新数据刷新datagridview。

问题:

  

无法刷新datagridview   通过删除或进行更改后   添加新数据。

我正在使用与datagridview的数据源链接的绑定源。

我用不同的解决方案尝试了一切,并从不同的论坛阅读建议,但我仍然无法解决这个问题。

我也尝试使用这些语法“BindingSource.ResetBindings(false)”,“BindingSource.Refresh()”等但没有结果。

以下链接:

How to refresh a bindingsource

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 个答案:

答案 0 :(得分:2)

我遇到过同样的问题,发现问题出在静态构造函数中的BindingSource初始化(该类是单例)。意识到这一点后,我将代码移动到调用事件,它最终工作,无需分配null或调用clear方法。希望这会有所帮助。

答案 1 :(得分:1)

无需定义列(除非您真的想...)

每次添加或删除列表中的内容时,只需调用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();
    }

答案 2 :(得分:0)

您需要一个列表,该列表将在添加项目等时通知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