【发布时间】:2018-12-13 12:30:46
【问题描述】:
我有带有 datagridview 和一个按钮的 form1。当我单击一个按钮时,会打开一个新表单,其中有一个文本框和一个按钮。在此文本框中,我可以编写查询并单击按钮查询结果显示在 form1 datagridview 中。问题是它打开了 form1 的另一个实例,但我希望 form1 始终保持打开状态,并且根据 form2 中的查询输入,只有 datagridview 中的记录在更改。 form1 和 form2 都需要在调用时打开并激活。
这是我的代码:
//FORM 1
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var queryForm = new Form2();
queryForm.Show(this);
}
//FORM 2
public Form2()
{
InitializeComponent();
}
private SqlConnection Conn;
private void Form1_Load(object sender, EventArgs e)
{
Conn = new SqlConnection(@"Data Source=srvr;Initial Catalog =db; User ID =user; Password =pass");
}
private void btnExecute_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.Show(this);
frm1.Activate();
SqlCommand cmd = new SqlCommand();
cmd.Connection = Conn;
cmd.CommandText = txtQuery.Text;
try
{
Conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
frm1.dataGridView1.Columns.Clear();
frm1.dataGridView1.Rows.Clear();
if (reader.HasRows)
{
DataTable schema = reader.GetSchemaTable();
int field_num = 0;
foreach (DataRow schema_row in schema.Rows)
{
int col_num = frm1.dataGridView1.Columns.Add(
"col" + field_num.ToString(),
schema_row.Field<string>("ColumnName"));
field_num++;
frm1.dataGridView1.Columns[col_num].AutoSizeMode =
DataGridViewAutoSizeColumnMode.AllCells;
}
object[] values = new object[reader.FieldCount];
while (reader.Read())
{
reader.GetValues(values);
frm1.dataGridView1.Rows.Add(values);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error executing command.\n" + ex.Message);
}
finally
{
Conn.Close();
}
}
【问题讨论】:
-
那么打开另一个创建的表单而不是实例的过程是什么?
-
如果您的问题得到回答,请接受给定的答案 - meta.stackexchange.com/questions/5234/… - 如果您的问题没有得到回答,请通过编辑您的问题来说明您的问题
-
@RandRandom 抱歉,稍后我有更多时间会回复这个问题。