如何刷新绑定到已更新的 Access 数据库表的 DataGridView?

Posted

技术标签:

【中文标题】如何刷新绑定到已更新的 Access 数据库表的 DataGridView?【英文标题】:How Do I refresh a DataGridView bound to an Access database table that was updated? 【发布时间】:2013-08-06 19:50:20 【问题描述】:

我有一个桌面应用程序项目。在入口页面上,DataGridView 显示数据库中的现有项目。现在,当我输入一个新项目时,我想将其直接插入DataGridView。意思是,我想重新加载/刷新DataGridView。我的数据库在 MS Access 中。

private DataTable GetData()

    DataTable dt = new DataTable();
    //using (SqlConnection con = new SqlConnection(conn))
    using (OleDbConnection con=new OleDbConnection(conn))
    
        OleDbCommand cmd = new OleDbCommand("Select ID,Name from GroupDetails where comID='" + label1.Text + "'", con);
        //SqlCommand cmd = new SqlCommand("Select ID,Name from GroupDetails where comID='" + label1.Text + "'", con);
        con.Open();
        //SqlDataAdapter ad = new SqlDataAdapter(cmd);
        OleDbDataAdapter ad = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        ad.Fill(ds);
        dt = ds.Tables[0];
        return dt;
    


private void btnSave_Click(object sender, EventArgs e)

    //SqlConnection con = new SqlConnection(conn);
    OleDbConnection con = new OleDbConnection(conn);
    con.Open();
    //SqlCommand cmd;
    try
    
        string query = "insert into GroupDetails (ID,Name) values(@ID,@Name)";
        // cmd = new SqlCommand(query,con);
        OleDbCommand cmd = new OleDbCommand(query, con);
        cmd.Parameters.AddWithValue("@ID",txtID.Text);
        cmd.Parameters.AddWithValue("@Name",txtName.Text);
        int i = cmd.ExecuteNonQuery();
        if(i!=0)
        
            dataGridGroup.DataSource = GetData();
        
    
    catch (Exception ex)
    
        ex.Message.ToString();
    
    finally
    
        con.Close();
    

[注意:当我使用 SQL 数据库时,它可以正常工作。]

【问题讨论】:

在表单的保存方法中调用任何加载并将数据绑定到网格的方法,这应该引用网格 @Coder::此代码在我使用 SQL Server 时有效。但是当我使用访问数据库时,它从第二次开始工作。意思是,让我必须输入 5 个数据。 ID 是 1,2,3,4,5。当我插入 1 时,它不需要任何东西。当我输入 2 时,它显示 1 的数据。当我插入 3 时,它显示 2 的数据。这意味着它从第二次开始工作。 【参考方案1】:

我会有点明显,但你说:“让我必须输入 5 个数据。ID 是 1,2,3,4,5。当我插入 1 时,它不需要任何东西。当我输入 2 它显示 1 的数据。当我插入 3 时它显示 2 的数据。这意味着它从第二次开始工作。"

我说:当你看到这样的行为时,立即知道这是一个时间问题

在这种特定情况下,我认为如果您先关闭连接然后调用GetData() 它应该可以工作:

private void btnSave_Click(object sender, EventArgs e)

    //SqlConnection con = new SqlConnection(conn);
    OleDbConnection con = new OleDbConnection(conn);
    int i = 0;
    con.Open();
    //SqlCommand cmd;
    try
    
        string query = "insert into GroupDetails (ID,Name) values(@ID,@Name)";
        // cmd = new SqlCommand(query,con);
        OleDbCommand cmd = new OleDbCommand(query, con);
        cmd.Parameters.AddWithValue("@ID",txtID.Text);
        cmd.Parameters.AddWithValue("@Name",txtName.Text);
        i = cmd.ExecuteNonQuery();
    
    catch (Exception ex)
    
        ex.Message.ToString();
    
    finally
    
        con.Close();

        if(i!=0)
        
            dataGridGroup.DataSource = GetData();
        
    

【讨论】:

@No Idea For Name:: 谢谢你的回答。它工作正常。

以上是关于如何刷新绑定到已更新的 Access 数据库表的 DataGridView?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用绑定数据集自动更新访问中的报表?

如何在 C# 中更新或刷新与 Ms-access 连接的数据网格视图

更新取消事件之前的 MS Access 不适用于未绑定的组合框

更新数据库源后,如何让 Visual Studio 2010 刷新我的数据集?

如何在更新数据源时让绑定的 winforms 控件刷新?

C#怎样把access数据库中的数据刷新一下显示在DataGridView中