目标:
单击“添加”或“删除”按钮后,应使用文档中的最新数据刷新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;
答案 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