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

时间:2013-08-06 19:50:20

标签: c# winforms ms-access datagridview ado.net

我有一个桌面应用程序项目。在条目页面上,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数据库时,它可以正常工作。]

1 个答案:

答案 0 :(得分:1)

我会有点obvios,但你说:“我要输入5个数据.ID是1,2,3,4,5。当我插入1时,它不需要任何东西。我输入2显示1的数据。当我插入3时它显示2的数据。这意味着它从第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();
        }
    }
}