C# 添加新记录后在datagrid中显示数据

C# 添加新记录后在datagrid中显示数据,c#,database,datagridview,C#,Database,Datagridview,保存新记录后,我想在dataGridView中显示数据库中的数据。单击按钮后,数据已保存,但未显示在datagridview中。如何显示这些数据 private void btn_add_Click(object sender, EventArgs e) { { if (textBox_tarikh.Text == "" || textBox_resit.Text == "" || textBox_bayaran.Text == "")

保存新记录后,我想在dataGridView中显示数据库中的数据。单击按钮后,数据已保存,但未显示在datagridview中。如何显示这些数据

private void btn_add_Click(object sender, EventArgs e)
    {

        {

            if (textBox_tarikh.Text == "" || textBox_resit.Text == "" || textBox_bayaran.Text == "")
            {
                MessageBox.Show("Please Fill In The Blank");

            }
            else
            {

                    String bResult = textBox_ic.Text;
                    string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\acap\Documents\Data.mdf;Integrated Security=True;Connect Timeout=30"; // add your conncetion string here
                    SqlConnection connection = new SqlConnection(connectionString);
                    SqlCommand cmd = new SqlCommand("INSERT Pembayaran (Description, Date, No_Resit, Payment, Studentic) VALUES (@Description, @date, @resit, @payment, @val)", connection);
                    cmd.Parameters.AddWithValue("@val", bResult);
                    cmd.Parameters.AddWithValue("@Description", label4.Text);
                    cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(textBox_tarikh.Text));
                    cmd.Parameters.AddWithValue("@resit", textBox_resit.Text);
                    cmd.Parameters.AddWithValue("@payment", textBox_bayaran.Text);
                    SqlDataAdapter dataadapter = new SqlDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    connection.Open();
                    dataadapter.Fill(ds, "pembayaran_table");
                    connection.Close();
                    dataGridView3.DataSource = ds;
                    dataGridView3.DataMember = "pembayaran_table";

                   cmd.Connection.Open();
                    try
                    {
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("Data saved Successfully");
                }
                    catch (Exception ex)
                    {
                        //throw new Exception("Error " + ex.Message);
                        MessageBox.Show("Receipt No. is already use");
                    }

            }

首先,我在您的代码片段中没有看到任何数据绑定代码,例如
DataGridView.DataSource=”“
DataGridView.DataBind()

插入数据后可以执行的操作,请使用
@@IDENTITY
检索插入内容的id。然后使用检索到的id捕获新记录

我注意到在您的代码片段中,您使用了相同的查询

SqlDataAdapter dataadapter = new SqlDataAdapter(cmd);
您应该编写另一个
SqlStatement
并从
SqlDataAdapter

例如:

// Assumes that connection is a valid SqlConnection object.  
string queryString =   
  "SELECT CustomerID, CompanyName FROM dbo.Customers";  
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);  

DataSet customers = new DataSet();  
adapter.Fill(customers, "Customers");  

将记录插入数据库后,只需更新DataGridView的数据源。

您可以尝试:

private void btn_add_Click(object sender, EventArgs e)
{
   string bResult = textBox_ic.Text;
   if (textBox_tarikh.Text == "" || textBox_resit.Text == ""||textBox_bayaran.Text == "")
        {
            MessageBox.Show("Please Fill In The Blank");
        }
   string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\acap\Documents\Data.mdf;Integrated Security=True;Connect Timeout=30";
   SqlConnection connection = new SqlConnection(connectionString);
   SqlCommand cmd ;
   try
    {
      if(connection.State == ConnectionState.Closed) connection.Open();
      cmd = new SqlCommand("INSERT Pembayaran (Description, Date, No_Resit, Payment, Studentic) VALUES (@Description, @date, @resit, @payment, @val)", connection);
      cmd.Parameters.AddWithValue("@val", bResult);
      cmd.Parameters.AddWithValue("@Description", label4.Text);
      cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(textBox_tarikh.Text));
      cmd.Parameters.AddWithValue("@resit", textBox_resit.Text);
      cmd.Parameters.AddWithValue("@payment", textBox_bayaran.Text);
      cmd.Executenonquery();

      SqlDataAdapter da = new SqlDataAdapter("Select * from Pembayaran",connection);
      DataTable dt = new DataTable();
      da.Fill(dt);
      dataGridView3.DataSource = dt;
    }
   catch(Exception ex)
   {
   }
   finally
   {
      if(connection.State == ConnectionState.Open) connection.Close();
   }
}

绑定网格的代码在哪里?将其作为一个方法,并在
cmd.ExecuteNonQuery()之后调用它们
在此之前,我使用刚刚编辑过的上述代码,但给出的错误是“无法创建pembayaran_表字段的子列表”。@ducannguyen答案有效。请尝试一下