Reputation: 401
After entering data into all the textbox, and after clicking the submit button, it won't immediately show in the datagridview, I need to reopen the form in order to see the new inserted row. What code to put in for refresh?
Followed @user3222297 code. by adding grdPatient.Update(); and grdPatient.Refresh(); still doesn't get refreshed after i click the OK for insert successful.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
namespace GRP_02_03_SACP
{
public partial class patient : Form
{
// Data Table to store employee data
DataTable Patient = new DataTable();
// Keeps track of which row in Gridview
// is selected
DataGridViewRow currentRow = null;
SqlDataAdapter PatientAdapter;
public patient()
{
InitializeComponent();
}
private void btnSubmit_Click(object sender, EventArgs e)
{
if (btnSubmit.Text == "Clear")
{
btnSubmit.Text = "Submit";
txtpFirstName.Focus();
}
else
{
btnSubmit.Text = "Clear";
int result = AddPatientRecord();
if (result > 0)
{
MessageBox.Show("Insert Successful");
grdPatient.Update();
grdPatient.Refresh();
}
else
MessageBox.Show("Insert Fail");
}
}
private int AddPatientRecord()
{
int result = 0;
// TO DO: Codes to insert customer record
//retrieve connection information info from App.config
string strConnectionString = ConfigurationManager.ConnectionStrings["sacpConnection"].ConnectionString;
//STEP 1: Create connection
SqlConnection myConnect = new SqlConnection(strConnectionString);
//STEP 2: Create command
String strCommandText = "INSERT PATIENT(pFirstName, pLastName, pContact, pAddress, pCity, pZip, pNationality, pRace, pIC, pGender, pDOB, pBloodType, pEmail) "
+ " VALUES (@pFirstName,@pLastName,@pContact,@pAddress,@pCity,@pZip,@pNationality, @pRace, @pIC, @pGender, @pDOB, @pBloodType, @pEmail)";
SqlCommand updateCmd = new SqlCommand(strCommandText, myConnect);
updateCmd.Parameters.AddWithValue("@pFirstName", txtpFirstName.Text);
updateCmd.Parameters.AddWithValue("@pLastName", txtpLastName.Text);
//updateCmd.Parameters["@clientid"].Direction = ParameterDirection.Output;
updateCmd.Parameters.AddWithValue("@pContact", txtpContact.Text);
updateCmd.Parameters.AddWithValue("@pAddress", txtpAddress.Text);
updateCmd.Parameters.AddWithValue("@pCity", txtpCity.Text);
updateCmd.Parameters.AddWithValue("@pZip", txtpZip.Text);
updateCmd.Parameters.AddWithValue("@pNationality", txtpNationality.Text);
updateCmd.Parameters.AddWithValue("@pRace", txtpRace.Text);
updateCmd.Parameters.AddWithValue("@pIC", txtpIC.Text);
updateCmd.Parameters.AddWithValue("@pGender", txtpGender.Text);
updateCmd.Parameters.AddWithValue("@pDOB", txtpDOB.Text);
updateCmd.Parameters.AddWithValue("@pBloodType", txtpBloodType.Text);
updateCmd.Parameters.AddWithValue("@pEmail", txtpEmail.Text);
// STEP 3 open connection and retrieve data by calling ExecuteReader
myConnect.Open();
// STEP 4: execute command
// indicates number of record updated.
result = updateCmd.ExecuteNonQuery();
// STEP 5: Close
myConnect.Close();
return result;
}
private void patient_Load(object sender, EventArgs e)
{
LoadPatientRecords();
}
private void LoadPatientRecords()
{
//retrieve connection information info from App.config
string strConnectionString = ConfigurationManager.ConnectionStrings["sacpConnection"].ConnectionString;
//STEP 1: Create connection
SqlConnection myConnect = new SqlConnection(strConnectionString);
//STEP 2: Create command
string strCommandText = "SELECT pFirstName, pLastName, pContact, pAddress, pCity, pZip, pNationality, pRace, pIC, pGender, pDOB, pBloodType, pEmail, pUsername, pPassword FROM Patient";
PatientAdapter = new SqlDataAdapter(strCommandText, myConnect);
//command builder generates Select, update, delete and insert SQL
// statements for MedicalCentreAdapter
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(PatientAdapter);
// Empty Employee Table first
Patient.Clear();
// Fill Employee Table with data retrieved by data adapter
// using SELECT statement
PatientAdapter.Fill(Patient);
// if there are records, bind to Grid view & display
if (Patient.Rows.Count > 0)
grdPatient.DataSource = Patient;
}
}
}
Upvotes: 16
Views: 187063
Reputation: 1
Create a method and call the data table method method in that. Below is the example:
private void RefreshDataGridView() {
usrlogin = Application.OpenForms.OfType().FirstOrDefault();
con.ConnectionString = usrlogin.connectionString;
DataTable data = loadinGrid(); // Assuming this method fetches data from your database
// Clear existing rows and add the new data
customDataGridView2.Rows.Clear();
foreach (DataRow row in data.Rows)
{
string usrn = row["username"].ToString();
string usrid = row["userid"].ToString();
string role = "";
switch (usrid)
{
case "1":
role = "Admin";
break;
case "2":
role = "Operator";
break;
case "3":
role = "Authorizer";
break;
case "4":
role = "Key Officer";
break;
default:
role = "Unknown";
break;
}
customDataGridView2.Rows.Add(false, usrn, role, usrid); // Add checkboxes, username, and userid
}
customDataGridView2.CellClick += customDataGridView2_CellContentClick_1;
customDataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
Upvotes: 0
Reputation: 824
I tried everything mentionned here and it all failed.
What I needed to do was Thread.Sleep(1_000);
between the database update and the datagridview refresh.
It seems that the datagridview was refreshing before the data was updated in the database.
Upvotes: 0
Reputation: 49
Try below piece of code.
this.dataGridView1.RefreshEdit();
Upvotes: -1
Reputation: 1383
Use LoadPatientRecords()
after a successful insertion.
Try the below code
private void btnSubmit_Click(object sender, EventArgs e)
{
if (btnSubmit.Text == "Clear")
{
btnSubmit.Text = "Submit";
txtpFirstName.Focus();
}
else
{
btnSubmit.Text = "Clear";
int result = AddPatientRecord();
if (result > 0)
{
MessageBox.Show("Insert Successful");
LoadPatientRecords();
}
else
MessageBox.Show("Insert Fail");
}
}
Upvotes: 4
Reputation: 85
In the form designer add a new timer using the toolbox. In properties set "Enabled" equal to "True".
The set the DataGridView
to equal your new data in the timer
Upvotes: 0
Reputation: 91
You can set the datagridview
DataSource
to null
and rebind it again.
private void button1_Click(object sender, EventArgs e)
{
myAccesscon.ConnectionString = connectionString;
dataGridView.DataSource = null;
dataGridView.Update();
dataGridView.Refresh();
OleDbCommand cmd = new OleDbCommand(sql, myAccesscon);
myAccesscon.Open();
cmd.CommandType = CommandType.Text;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable bookings = new DataTable();
da.Fill(bookings);
dataGridView.DataSource = bookings;
myAccesscon.Close();
}
Upvotes: 3
Reputation: 1149
Only need to fill datagrid again like this:
this.XXXTableAdapter.Fill(this.DataSet.XXX);
If you use automaticlly connect from dataGridView this code create automaticlly in Form_Load()
Upvotes: 14
Reputation: 111
I don't know if you resolved your problem, but a simple way to resolve this is rebuilding the DataSource (it is a property) of your datagridview. For example:
grdPatient.DataSource = MethodThatReturnList();
So, in that MethodThatReturnList() you can build a List (List is a class) with all the items you need. In my case, I have a method that return the values for two columns that I have on my datagridview.
Pasch.
Upvotes: 0
Reputation: 206
Try refreshing the datagrid after each insert
datagridview1.update();
datagridview1.refresh();
Hope this helps you!
Upvotes: 9