我有一个datagridview。我读了一个xml文件并将数据绑定到gridview。我更改了xml并以另一种形式保存。所以我重读了xml文件并将其绑定到gridview。数据表正在获取更新的值。但是在我关闭并再次打开应用程序之前,网格没有得到更新。怎么做?
谢谢。
此致 Raghavendra
#1
DataGridView是否有Databind()或Rebind()?我像这样设置数据源 -
dvMoviesList.DataSource = dtMovies;
如果我向dtMovies表中添加任何新行并再次设置数据源,则会反映出来。但是,如果我编辑任何现有行的值并重新分配数据源,则在我关闭并再次打开应用程序之前,它不会被反映出来。有什么想法吗?
谢谢。
答案 0 :(得分:9)
我认为你需要在DataGridView和DataTable之间放置一个BindingSource。
DataGridView _dgv = new DataGridView();
BindingSource _bs = new BindingSource();
DataTable _dt = new DataTable();
.
.
.
_dgv.DataSource = _bs;
_bs.DataSource = _dt;
现在每当_dt
更新时,BindingSource都会负责刷新DataGridView,您不必担心重置任何DataSource属性。可以在InitializeComponent()
方法(设计器),Form的构造函数或Form.Load事件处理程序中设置DataSource属性。
答案 1 :(得分:1)
我确定我要提出的建议并不是正确的方法,但我遇到了同样的问题并且大多数时候都是ASP.NET开发人员并且没有在winforms中做过多少工作我找到的唯一解决方案是设置数据源为NULL然后重新绑定数据。
实施例: this.dataGridView.DataSource = null; this.dataGridView.DataSource = myDataSource;
要验证纳赛尔推荐的解决方案,即使它有效,我的解决方案似乎也不正确。
答案 2 :(得分:0)
你试过这个吗?
dvMoviesList.Refresh();
答案 3 :(得分:0)
您只需要像这样对数据源进行数据绑定
ArrayList list = new ArrayList();
list = YourXMLContent.GetItems();
GridView1.datasource = list; // you can use you DataTable instead of list
GridView1.update();
Gridview1.invalidate();
全部。
答案 4 :(得分:0)
仅供参考:我注意到将DataSource设置为DataSet与DataTable之间存在差异。将其设置为DataSet不会导致网格刷新,即使它只包含一个表也是如此。但是,将其设置为DataSet内的DataTable会导致网格正确刷新。
顺便说一句,我在一个与DataGridView关联的中间BindingSource对象中设置DataSource属性,而不是在DataGridView本身。不确定这是否重要。
这可能只与问题切线相关,因为问题中的DataSource是XML,而不是DataSet。但是,我的问题的其他人可能会碰到这个话题(正如我所做的那样),所以无论如何我都发布了这个。