Hi,
I have a code which generated dynamic gridviews based on a column ('c_AnalyticalSystemID"). Now I have a samll problem in passing cell parameter into a textbox which I clicked on a datagridview.
the code is :
private void button1_Click(object sender, EventArgs e)
{
string query = "select t.c_AnalyticalSystemID,t.c_RetentionTime,t.c_IonType , t.c_MSstage, k.c_MSstage, t.c_IonFormula, k.c_IonCharge, t.c_IonMass as 'Mass', t.c_MinArea, t.c_UserID_stamp,c_Time_Stamp,k.c_IonTypeRule from C_Analytical_Type1 t join C_AnalyticalSystems c on t.c_analyticalsystemid = c. c_analyticalsystemid join C_Analytical_Type1_IonTypes k on k.c_iontype = t.c_iontype where t.c_id=" + Convert.ToInt32(textBox1.Text.ToString()) + "";
DataTable dt_cmbo_ = new DataTable();
OdbcDataAdapter cmbo_ = new OdbcDataAdapter("SELECT c_IonCharge,c_IonType,c_IonTypeExplained from C_Analytical_Type1_IonTypes", OdbcCon);
dt_cmbo_.Columns.Clear();
dt_cmbo_.Rows.Clear();
cmbo_.Fill(dt_cmbo_);
OdbcCommand cmd = new OdbcCommand(query, OdbcCon);
OdbcDataReader dr = cmd.ExecuteReader();
DataTable dt1 = new DataTable();
dt1.Load(dr);
int margin = 30;
Point pt = new Point(margin, margin);
panel1.Controls.Clear();
DataTable distinctSystemIDs = dt1.DefaultView.ToTable(true, "c_AnalyticalSystemID");
// DataTable ion = dt.DefaultView.ToTable(true, "c_IonTypeExplained");
for (int i = 0; i <= distinctSystemIDs.Rows.Count -1; i++)
{
DataSet az15 = new DataSet();
DataSet z12 = new DataSet();
OdbcDataAdapter adaper12 = new OdbcDataAdapter("SELECT c_IonType FROM C_Analytical_Type1 where c_id = ('" + textBox1.Text + "')", OdbcCon);
adaper12.Fill(z12);
foreach (DataRow row1 in z12.Tables[0].Rows)
{
textBox2.Clear();
for (int i1 = 0; i1 < z12.Tables[0].Columns.Count; i1++)
textBox2.Text += row1[i1].ToString();
}
DataSet z1 = new DataSet();
OdbcDataAdapter adaper1 = new OdbcDataAdapter("SELECT c_IonTypeExplained FROM C_Analytical_Type1_IonTypes where c_IonType = ('" + textBox2.Text + "')", OdbcCon);
adaper1.Fill(z1);
foreach (DataRow row1 in z1.Tables[0].Rows)
{
textBox4.Clear();
for (int i1 = 0; i1 < z1.Tables[0].Columns.Count; i1++)
textBox4.Text += row1[i1].ToString();
}
DataSet az125 = new DataSet();
OdbcDataAdapter adapter125 = new OdbcDataAdapter("select c_formula from C_Compound where c_id = ('" + textBox1.Text + "')", OdbcCon);
adapter125.Fill(az125);
//textBox11.Clear();
foreach (DataRow row1 in az125.Tables[0].Rows)
{
textBox6.Clear();
for (int i1 = 0; i1 < az125.Tables[0].Columns.Count; i1++)
textBox6.Text += row1[i1].ToString();
}
int systemID = (int)distinctSystemIDs.Rows[i][0];
DataGridView dgw = new DataGridView();
Label l = new Label();
l.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
l.Location = pt;
l.Text = "System " + systemID.ToString();
pt.Y += l.Height + 2; // margin is for spacing between grids
dgw.Tag = systemID; // store systemID of the DGV if you need it later
dgw.AllowUserToAddRows = false;
dgw.AllowUserToDeleteRows = false;
dgw.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
dgw.Size = new Size(730, 100); // 2 * margin = left + right margin
dgw.Location = pt;
pt.Y += dgw.Height + margin; // margin is for spacing between grids
//this.Controls.Add(dgw);
// dgw.Columns["c_IonTypeRule"].Visible = false;
//dgw.Columns["c_AnalyticalTypeExplained"].Visible = false;
// dgw.Columns["c_ID"].Visible = false;
cmdx.Name = "IonType";
cmdx.DataPropertyName = "c_IonType";
cmdx.HeaderText = "IonType";
cmdx.Width = 80;
cmdx.DataSource = dt_cmbo_;
cmdx.ValueMember = "c_IonType";
cmdx.DisplayMember = "c_IonTypeExplained";
//c_IonTypeRule cmdx.DisplayMember = " c_IonCharge";
panel1.Controls.Add(dgw);
panel1.Controls.Add(l);
dgw.Columns.Add(cmdx);
DataView vw = new DataView(dt1, string.Format("c_AnalyticalSystemID = {0}", systemID), null, DataViewRowState.CurrentRows);
dgw.DataSource = vw;
dgw.Columns["c_AnalyticalSystemID"].ReadOnly = true;
// dgw.Rows[i].Cells["IonCharge"].Value = textBox1.Text;
dgw.Columns[3].Visible = false;
int k = 0;
//
// textBox58.Text = mMwtWin1.ComputeMass(dt1.Rows[x]["Formula"].ToString().Trim()).ToString();
for (int x = 0; x <= dt1.Rows.Count - 1; x++)
{
string formulae = textBox6.Text.ToString();
string str11 = dt1.Rows[x]["c_IonTypeRule"].ToString();
string H = "+";
for (int v = 0; v <= str11.Length - 1; v++)
{
if (str11.Substring(v, 1).ToString() == "-" && char.IsLetter(Convert.ToChar(str11.Substring(v + 1, 1))))
{
H = "-";
}
if (str11.Substring(v, 1).ToString() != "-")
{
if (v <= str11.Length - 1)
{
if (char.IsLetter(str11, v))
{
string atom = "";
if (v + 1 <= str11.Length - 1 && char.IsLetter(Convert.ToChar(str11.Substring(v, 1))) && char.IsLower(str11, v + 1))
{
try
{
H = str11.Substring(v - 1, 1).ToString();
atom = str11.Substring(v, 2).ToString();
}
catch (Exception ex)
{
H = "+";
atom = str11.Substring(v, 2).ToString();
// atom =
}
// dt5.Rows[x]["c_IonFormula"] = get_numofstr(atom, formulae, H, get_numfrominotype(str11, v + 1));
formulae = get_numofstr(formulae, H, get_numfrominotype(str11, v + 1), atom).ToString();
v = v + 1;
H = "+";
}
else
{
atom = str11.Substring(v, 1).ToString();
dt1.Rows[x]["c_IonFormula"] = get_numofstr(formulae, H, get_numfrominotype(str11, v), atom);
formulae = dt1.Rows[x]["c_IonFormula"].ToString();
textBox5.Text = formulae;
H = "+";
}
}
}
}
}
MwtWinDll.MolecularWeightCalculator mMwtWin1 = new MwtWinDll.MolecularWeightCalculator();
dt1.Rows[x]["Mass"] = mMwtWin1.ComputeMass(dt1.Rows[x]["c_IonFormula"].ToString().Trim()).ToString();
}
}
}
private void dgw_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
try
{
DataGridViewRow row = new DataGridViewRow();
//DataGridView dgw = new DataGridView();
row = dgw.Rows[e.RowIndex];
// d2 = 1;
// Will put the value of the first column of the selected row into the textbox
textBox60.Text = row.Cells[e.ColumnIndex].Value.ToString();
}
Is it correct what I'm doing to get the value of cell into a textbox when clicked on a paticular datagridview.