为什么datagridview不刷新?

时间:2010-11-05 16:40:07

标签: c# .net winforms data-binding datagridview

按下按钮后会发生什么:

    dataGridView1.DataSource = ConnectandReadList(some_query);
    dataGridView1.Refresh();

请注意我正在使用另一个名为chart1的控件执行此操作,并且它可以正常使用它,它会使用新的重新获取的数据填充它,但datagridview只是保持不变

第一次尝试成功。

然而,第二次按它,它显示相同的东西!

任何人都知道我是否正确刷新了datagridview?

9 个答案:

答案 0 :(得分:10)

这里与@Fake有细微差别,但调用Refresh()不能仅在dataGridView上调用它

  

“强制控件使其客户区无效,并立即重绘自身和任何子控件。”

由于此方法涉及任何控制,而不涉及刷新与对象相关的数据。请参阅here (DataGridView Methods)并向下滚动到“刷新”,您将看到指向Control.Refresh Method

的链接点

你想要这样的东西;

BindingSource bs = new BindingSource(); 
bs.DataSource = ConnectandReadList(some_query);
dataGridView1.DataSource = bs;
bs.ResetBindings(false)

然后您就可以在ResetBindings()上致电bs(您的BindingSource);

BindingSource bs = new BindingSource(); 
private refreshData()
{
    bs.ResetBindings(false)
}

答案 1 :(得分:1)

DataGridView在您第一次分配DataSource时设置绑定。问题是,如果分配与初始分配的结构不同,后续的DataSource分配将失败,因为绑定现在是“关闭”

您需要重置DataGridView thusly,以便绑定新数据。 (该链接适用于VB,但您只需要知道要调用的方法。即使复制/粘贴也会过度。)

答案 2 :(得分:1)

试试这个吗?

dataGridView1.DataSource = null;
dataGridView1.DataSource = ConnectandReadList(some_query);
dataGridView1.Refresh();

答案 3 :(得分:1)

这行代码将数据加载到wMP_EXPORTDataSet.DEST_AX_PRICEDISCADMTRANSENTITY表中。您可以根据需要移动或删除它。

this.dEST_AX_PRICEDISCADMTRANSENTITYTableAdapter.Fill(this.wMP_EXPORTDataSet.DEST_AX_PRICEDISCADMTRANSENTITY);

答案 4 :(得分:1)

在将List <>设置为数据源时将其绑定到List <>时可以做的小技巧,像这样在末尾添加ToList():

dataGridView1.DataSource = ConnectandReadList(some_query).ToList();

由于某种原因,这导致刷新而不丢失任何引用或任何内容。

一种替代方法是直接通知DataGridView其数据已更改,如下所示:

dataGridView1.DataSource = ConnectandReadList(some_query)
var m = dataGridView1.GetType().GetMethod("OnDataSourceChanged", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(dataGridView1, new object[] { EventArgs.Empty });

答案 5 :(得分:0)

您是否尝试在EndEdit()之前致电Refresh()

答案 6 :(得分:0)

你可以像@cycl建议那样做,你也可以使用一个BindingSource,我相信这是微软推荐的方法。

BindingSource bs = new BindingSource(); 
bs.DataSource = ConnectandReadList(some_query);
dataGridView1.DataSource = bs;
dataGridView1.Refresh;

答案 7 :(得分:0)

实际上问题在于您的TableAdapter没有刷新。 我在编辑表(mydatabase.tbl)后使用此代码来刷新它:

            tblTableAdapter.Fill(mydatabaseDataSet.tbl);
            dataGridView1.DataSource = tblBindingSource;
            dataGridView1.Update();

答案 8 :(得分:-1)

您是第一次在if(!Page.IsPostback)

中初始化数据源吗?

可能正在重置每个回发上的数据源。