首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从后台线程正确更新数据绑定datagridview

从后台线程正确更新数据绑定datagridview的方法如下:

  1. 使用委托(Delegate)更新UI元素

在后台线程中,无法直接更新UI元素。因此,需要使用委托(Delegate)来更新UI元素。具体步骤如下:

a. 创建一个委托(Delegate)

代码语言:csharp
复制
public delegate void UpdateDataGridViewDelegate(DataTable dataTable);

b. 在主窗体中,创建一个方法,用于更新datagridview

代码语言:csharp
复制
public void UpdateDataGridView(DataTable dataTable)
{
    if (this.dataGridView1.InvokeRequired)
    {
        UpdateDataGridViewDelegate updateDataGridViewDelegate = new UpdateDataGridViewDelegate(UpdateDataGridView);
        this.Invoke(updateDataGridViewDelegate, dataTable);
    }
    else
    {
        this.dataGridView1.DataSource = dataTable;
    }
}

c. 在后台线程中,调用主窗体中的方法,更新datagridview

代码语言:csharp
复制
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // 获取数据
    DataTable dataTable = GetData();

    // 更新datagridview
    UpdateDataGridViewDelegate updateDataGridViewDelegate = new UpdateDataGridViewDelegate(UpdateDataGridView);
    this.Invoke(updateDataGridViewDelegate, dataTable);
}
  1. 使用BindingSource

另一种方法是使用BindingSource。具体步骤如下:

a. 在主窗体中,创建一个BindingSource对象,并将其绑定到datagridview

代码语言:csharp
复制
private void Form1_Load(object sender, EventArgs e)
{
    BindingSource bindingSource = new BindingSource();
    bindingSource.DataSource = typeof(DataTable);
    this.dataGridView1.DataSource = bindingSource;
}

b. 在后台线程中,更新BindingSource对象的DataSource属性

代码语言:csharp
复制
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // 获取数据
    DataTable dataTable = GetData();

    // 更新BindingSource对象的DataSource属性
    this.bindingSource1.DataSource = dataTable;
}

这两种方法都可以实现从后台线程正确更新数据绑定datagridview的目的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1时7分

腾讯 Elasticsearch 10 万+ 节点运营系统优化【第一期】

5分33秒

JSP 在线学习系统myeclipse开发mysql数据库web结构java编程

领券