我正在为音乐会和类似的东西制作售票系统。 当我从comboBox中选择事件时,会打开一个新表单,显示DataGridView中该节目的可用票证。不关闭包含计费数据的主表单。当我双击所选的票证时,需要关闭带有datagridview的辅助表单,将某些值发送到活动窗口。我不知道怎么做最后一部分。
我将事件从comboBox发送到新窗口以进行查询:
Boleto b = new Boleto(comboBox8.Text);
b.Show();
然后我打开连接并将select加载到DGV
try
{
connStr = "Server=localhost;Database=quanax;Uid=root;Pwd=root;Port=3306";
conn = new MySqlConnection(connStr);
conn.Open();
}
catch (Exception ex)
{
MessageBox.Show("Error: No se puede conectar con la base de datos");
MessageBox.Show(ex.ToString());
}
try
{
string query = "select id_boleto as 'Id', fecha as 'Fecha', evento as 'Evento', seccion as 'Sección', fila as 'Fila', asiento as 'Asiento', bloque as 'Bloque', total as 'Precio' from boletos where evento = '" + evento + "';";
mySqlDataAdapter = new MySqlDataAdapter(query, conn);
mySqlCommandBuilder = new MySqlCommandBuilder(mySqlDataAdapter);
dataTable = new System.Data.DataTable();
mySqlDataAdapter.Fill(dataTable);
bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
}
catch (Exception ex)
{
MessageBox.Show("Error! Intenta de nuevo");
MessageBox.Show(ex.ToString());
}
双击时,我将所需的值输入变量
try
{
MySqlCommand cmdc = new MySqlCommand("select seccion, fila, asiento, bloque, total from boletos where id_boleto ="+toolStripTextBox1.Text+";", conn);
MySqlDataAdapter dataadapc = new MySqlDataAdapter(cmdc);
System.Data.DataTable datatabc = new System.Data.DataTable();
dataadapc.Fill(datatabc);
aux1 = Convert.ToString(datatabc.Rows[0][0]);
aux2 = Convert.ToString(datatabc.Rows[0][1]);
aux3 = Convert.ToString(datatabc.Rows[0][2]);
aux4 = Convert.ToString(datatabc.Rows[0][3]);
aux5 = Convert.ToString(datatabc.Rows[0][4]);
}
catch (IndexOutOfRangeException ex)
{
}
catch (Exception ex)
{
MessageBox.Show("Error: No se puede conectar con la base de datos");
MessageBox.Show(ex.Message);
}
如果我需要关闭主窗体,那么重载构造函数应该是解决方案:
try
{
this.Close();
Form1 f1 = new Form1(aux1, aux2, aux3, aux4, aux5);
f1.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show(ex.ToString());
}
但是,由于我没有关闭主窗口,如何在关闭辅助窗体时将值aux1,aux2,aux3,aux4和aux5发送到活动窗体?我希望我清楚自己。感谢。
答案 0 :(得分:1)
我可以建议两种方式: 1.使用“ShowDialog()”。这样,您可以将aux1,aux2 ...设置为属性,并从主窗体中轻松获取数据:
Boleto b = new Boleto(comboBox8.Text);
b.ShowDialog();
this.aux1 = b.aux1;
.
.
将“this”作为参考传递,并在主窗体中包含属性以保存这些辅助值。所以你可以打电话给我。重载你的构造函数。确保在某处保存Mainform实例。
public Boleto(string text, MainForm form){//Code here}
然后你可以在关闭之前进行设置:
form.aux1 = aux1;
答案 1 :(得分:0)
您可以声明一个静态字符串列表然后使用它。例如,在您的主表单中使用:
public static List<string> Values = new List<string>();
// then add your strings into a list
Values.Add("String1");
Values.Add("String2");
Values.Add("String3");
Values.Add("String4");
Values.Add("String5");
然后在您的辅助表格中使用它们:
foreach(string s in MainForm.Values)
{
// and do what ever you want
}
答案 2 :(得分:0)
可用方法之一是在两种形式下使用一个数据,在第二种形式下更改以第一种形式共享更改。
另一种方法是在第一个表单处理Closed
事件并使用第二个表单属性。
...
你应该决定你想做什么! 我希望这会有所帮助。