【问题标题】:How do i fill datagrid one row at a time from database using async await [closed]如何使用异步等待从数据库中一次填充一行数据网格 [关闭]
【发布时间】:2021-06-18 23:24:47
【问题描述】:

有没有一种可能的方法可以一次用值/行填充/填充 datagridview。我已经尝试过这段代码,但它一次显示了数据库中的所有数据,我想要的是它会一次显示第 1 行,并且在下一行出现之前有 500 毫秒的延迟。抱歉,我刚接触 c#,这只是我学习 c# 的第三个月,我会感谢我能得到的任何帮助。谢谢。

  private async void button_Load_Click(object sender, EventArgs e)
    {
        var connection = @"Data Source=LAPTOP-C1P6RQIA\SQLEXPRESS;Initial Catalog=DBTest;Integrated Security=True";
        var command = @"SELECT * FROM Costumers";
        var data = await LoadData(command, connection);
        this.dataGridView1.DataSource = data;
    }

  public async Task<DataTable> LoadData(string connection, string command)
    {
        var dt = new DataTable();
        using (var adapt = new SqlDataAdapter(connection, command))
            await Task.Run(() => adapt.Fill(dt));
        return dt;
    }

此帖已编辑

【问题讨论】:

  • 你能再解释一下吗?如果你能给出一个简单的代码示例来做你期望的事情会更好(没有异步等待)

标签: c# winforms async-await


【解决方案1】:

当然,这是符合您要求的示例。

  1. 在表单的设计器中放置一个 DataGridView 和一个按钮。

  2. 将此代码添加到您的表单代码中:

     private async Task PopulateGrid()
     {
         var dt = new DataTable();
         dt.Columns.Add("Number");
         dt.Columns.Add("Time");
         dataGridView1.DataSource = dt;
    
         for (var rowNumber = 1; rowNumber <= 20; rowNumber++)
         {
             var newRow = dt.NewRow();
             newRow["Number"] = rowNumber.ToString();
             newRow["Time"] = DateTime.Now.ToString();
             dt.Rows.Add(newRow);
    
             await Task.Delay(500);
         }
     }
    
  3. 在您的 Button 的点击事件中,调用函数“PopulateGrid”,如下所示:

     private void button1_Click(object sender, EventArgs e)
     {
         PopulateGrid();
     }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多