Communication Between Two Forms: Part-II


Overview

Last time I wrote about the possibility of sending a string from a textbox in one form to another. Some people wrote to me asking if it could work in other situations, but one of them was very interesting, so I thought Id share this code with you as well! The scenario is to have a datagrid in a form and when you click the cell in the datagrid twice, you can see the result in a picturebox situated in another form.

Description

In this example I used Access as database, connecting to it with ADO.NET. So we need an OleDbConnection, OleDbCommand, OleDbAdapter, and a DataSet.

Look at this example:

private System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter1;
private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
private System.Data.OleDb.OleDbConnection oleDbConnection1;
private SendingPicture.DataSet1 dataSet11;
this.oleDbDataAdapter1 = new System.Data.OleDb.OleDbDataAdapter();
this.oleDbSelectCommand1 = new System.Data.OleDb.OleDbCommand();
this.oleDbConnection1 = new System.Data.OleDb.OleDbConnection();
this.dataSet11 = new SendingPicture.DataSet1();
//
// oleDbDataAdapter1
//
this.oleDbDataAdapter1.SelectCommand = this.oleDbSelectCommand1;
this.oleDbDataAdapter1.TableMappings.AddRange(
new System.Data.Common.DataTableMapping[]
{
new System.Data.Common.DataTableMapping("Table", "tbl_Test", new System.Data.Common.DataColumnMapping[]
{
new System.Data.Common.DataColumnMapping("IDImmagine","IDImmagine"),
new System.Data.Common.DataColumnMapping("Descrizione","Descrizione")
}
)
}
);
//
// oleDbSelectCommand1
//
this.oleDbSelectCommand1.CommandText = "SELECT IDImmagine,Descrizione FROM tbl_Test";
this.oleDbSelectCommand1.Connection = this.oleDbConnection1;

Look at here carefully

//
// oleDbConnection1
//
this.oleDbConnection1.ConnectionString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data
Source=" + Environment.CurrentDirectory + @"\Test.mdb;Mode=Share
Deny None;Extended Properties="""";Jet OLEDB:System database="""";Jet
OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet
OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet
OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet
OLEDB:New Database Password="""";Jet OLEDB:Create System
Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy
Locale on Compact=False;Jet OLEDB:Compact Without Replica
Repair=False;Jet OLEDB:SFP=False";
//
// dataSet11
//
this.dataSet11.DataSetName = "DataSet1";
this.dataSet11.Locale = new System.Globalization.CultureInfo("it-IT");
this.dataSet11.Namespace = http://www.tempuri.org/DataSet1.xsd;

and then in the Form-Load:

private void Form1_Load(object sender, System.EventArgs e)
{
oleDbDataAdapter1.Fill(dataSet11,"tbl_Test");
dataGrid1.SetDataBinding(dataSet11,"tbl_Test");
}

and
finally in the double-click event:

private void dataGrid1_DoubleClick_1(object sender, System.EventArgs e)
{
// here you can now the row number cell when you double-click
int i = dataGrid1.CurrentCell.RowNumber;
Form2 frm =
new Form2();
// and now you can load the image...dataGrid1[i,1]
frm.pictureBox1.Image = System.Drawing.Image.FromFile
Environment.CurrentDirectory + @"\Images\" + dataGrid1[i,1].ToString());
frm.Show();
}

thats it !!!