C# 使用C中的backgroundworker在datagridview中获取数据库数据#

C# 使用C中的backgroundworker在datagridview中获取数据库数据#,c#,datagridview,C#,Datagridview,在datagridview中从数据库获取数据后,重复最后一个数据,但缺少datagridview中的第一个数据。我关注这个链接 我得到这个输出,第一个数据:1122被遗漏,最后一个数据PEC-5281被重复。由于我的级别较低,我无法发布图像,所以我将链接放在可以查看输出的位置 您需要为每行创建一个对象集合,然后将该集合用作DataGridView 使用asyncwait可以做得更清楚一点,而且没有BackgroundWorker创建的额外线程 private async Task<IEn

在datagridview中从数据库获取数据后,重复最后一个数据,但缺少datagridview中的第一个数据。我关注这个链接

我得到这个输出,第一个数据:1122被遗漏,最后一个数据PEC-5281被重复。由于我的级别较低,我无法发布图像,所以我将链接放在可以查看输出的位置


您需要为每行创建一个对象集合,然后将该集合用作
DataGridView

使用
asyncwait
可以做得更清楚一点,而且没有
BackgroundWorker创建的额外线程

 private async Task<IEnumerable<RetriveTableData>> GetDataAsync()
 {
    var query = "SELECT * from tblBook";
    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(query, connection))
    {
        await connection.OpenAsync();
        using (var reader = command.ExecuteReaderAsync())
        {
            var data = new List<RetriveTableData>();
            while(await reader.ReadAsync())
            {
                var temp = new RetriveTableData
                {
                    EmpId = reader["C_FICH"].ToString();
                    EmpName = reader["C_SITE"].ToString();
                    AccessionNo = reader["accessionNo"].ToString();
                    Obj.Author = reader["author"].ToString();
                };

                data.Add(temp);
            }

            return data;
        }
    }
}

您需要为每一行创建一个对象集合,然后将该集合用作
DataGridView

使用
asyncwait
可以做得更清楚一点,而且没有
BackgroundWorker创建的额外线程

 private async Task<IEnumerable<RetriveTableData>> GetDataAsync()
 {
    var query = "SELECT * from tblBook";
    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(query, connection))
    {
        await connection.OpenAsync();
        using (var reader = command.ExecuteReaderAsync())
        {
            var data = new List<RetriveTableData>();
            while(await reader.ReadAsync())
            {
                var temp = new RetriveTableData
                {
                    EmpId = reader["C_FICH"].ToString();
                    EmpName = reader["C_SITE"].ToString();
                    AccessionNo = reader["accessionNo"].ToString();
                    Obj.Author = reader["author"].ToString();
                };

                data.Add(temp);
            }

            return data;
        }
    }
}

你只有一个Obj,而且你以一种奇怪的方式得到它。这是什么意思。我不明白你的回答是什么你必须在while-loop中创建一个新的obj。你只有一个obj,而且你得到它的方式很奇怪。这是什么意思。我不明白你回答了什么你必须在while循环中创建一个新的obj。
private async void Form_Load(object sender, EventArgs e)
{
    dataGridView1.DataSource = await GetDataAsync();
}