Introduction
For some applications, it is sometimes common to have parent and child forms, where a user is guided to the child form to input something and next the changes that he has made are visible
in the parent form without closing the child form.
If the program doesn't allow this, the only solution is closing the child form programmatically and returning the user to the parent form.
Suppose we have a program where the user will input 1000 customer names at the end of the day. Would it be efficient and user friendly to return the user to the parent form after he inputs each and every customer name.
The answer is no!
This is because the user will have to open the child form 1000 times to input 1000 customer names.
Instead of opening the child form multiple times, there is a way that I know which passes data from the child form to the parent form without closing the child form. The changes that the user has made are visible at the back of the child form, which is in the parent form.
Well, this simple application passes data from one form to another form. Many programmers face this kind of problem when the necessity of passing data from one form to another form occurs.
I have seen many articles where many experienced programmers wrote about data passing, but this one is the simplest one to learn (I hope :-)).
First of all, you have to create a database. I created a database and named it CustomerInfo
.
Then add a Table named Customer
, and a field to it named CustomerName(Varchar(50))
.
Using the Code
Create two forms frmCustomers
and frmCustomer
. One should hold all the Customers
, and another should simply save the customer
like the following:
The following is for the frmCustomers
form which shows all the customers
in the Datagrid
view list:
private void frmCustomers_Load(object sender, EventArgs e)
{
loadCustomer();
}
public void loadCustomer()
{
SqlConnection con = new SqlConnection("Data Source=localhost;
Database=CustomerInfo; UID=achakraborty; Integrated Security = True;");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customer", con);
DataSet ds = new DataSet("Customer");
da.Fill(ds, "Customer");
grd.DataSource = ds.Tables["Customer"];
}
private void btnAdd_Click(object sender, EventArgs e)
{
frmCustomer c = new frmCustomer();
c.CustomerEventHandler += new EventHandler(RefreshCustomerList);
c.ShowDialog();
}
void RefreshCustomerList(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=localhost;
Database=CustomerInfo; UID=achakraborty; Integrated Security = True;");
con.Open();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customer", con);
DataSet ds = new DataSet("Customer");
da.Fill(ds, "Customer");
grd.DataSource = ds.Tables["Customer"];
con.Close();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
public event System.EventHandler CustomerEventHandler;
private void btnSave_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=localhost;
Database=CustomerInfo; UID=achakraborty; Integrated Security = True;");
con.Open();
SqlCommand cmd = new SqlCommand("Insert Into Customer VALUES
('" + txtCustomerName.Text.ToString().Trim() + "')", con);
cmd.ExecuteNonQuery();
con.Close();
if (CustomerEventHandler != null)
{
CustomerEventHandler(sender, e);
}
txtCustomerName.Clear();
txtCustomerName.Focus();
}
I'm happy to present my first article on The Code Project. I'm hoping to use the experience to improve my writing style. So your comments, suggestions and criticism are very welcome.
History
- 26th March, 2009: Initial post