如何将值从第二个表单传递回c#

时间:2017-05-24 16:00:41

标签: c# sql sql-server forms

我在c#中专门编程相对较新。我通常在前端使用asp.net,在后端使用C#,但我正在尝试学习如何使用C#做更多事情。基本上,我有一个表单(form1),其上有文本框和一个按钮,可以转到form2(配置表单)。在form2上,我想从SQL Server中的数据库填充一些文本框,并允许我在需要配置/更改值时键入文本框。然后,当按下接受按钮时,我想在form1上使用form2的文本框中的值填充文本框。

所以,我基本上需要知道的是什么 1)如何使用sql server 填充文本框 2)然后我如何将这些值传递回形式1?

我已经查找/知道如何将输入的值从一个表单传递到另一个表单,但是我在没有使用页面加载的情况下将它们返回到第一个表单。

编辑:我能够修改和保存从sql server加载的信息,但是当我返回到表单1时,它不会反映这些更改。这是我的代码:

Form1中:

public Form1()
        {
            InitializeComponent();

            // Load the most recent configuration
            LoadConfig();
        }

private void LoadConfig()
    {
        // Populate the textboxes based on the last used settings
        // Create the SQL Connection
        String conString = ConfigurationManager.ConnectionStrings["mainConnection"].ConnectionString;
        SqlConnection con = new SqlConnection(conString);

        // Create the SELECT command
        String sqlSelect = //took out for formatting purposes, but its just a select from a table
        SqlCommand com = new SqlCommand(sqlSelect, con);

        try
        {
            con.Open();

            using (SqlDataReader read = com.ExecuteReader())
            {
                // Set the textboxes to the values from the database
                while (read.Read())
                {
                    txtInstrumentNoType.Text = (read["instr_group_filter"].ToString());
                    txtDocType.Text = (read["doc_types_filter"].ToString());
                    txtPageThreshhold.Text = (read["pages_per_subfolder"].ToString());
                }

            }
        }
        finally
        {
            con.Close();
        }
    }


private void btnConfigure_Click(object sender, EventArgs e)
        {
            // Open the Form2
            Form2 configureForm = new Form2();
            configureForm.Show();
        }

表格2

private void btnApply_Click(object sender, EventArgs e)
        {
            // Update the configuation
            ExecuteSqlUpdate();

        }


        private void ExecuteSqlUpdate()
        {
            // Create the SQL Connection
            String conString = ConfigurationManager.ConnectionStrings["mainConnection"].ConnectionString;
            SqlConnection con = new SqlConnection(conString);

            // Create the UPDATE command to update the configuration settings
            // that are stored in the database
            String sqlUpdate = "UPDATE Table" +
                                  "SET instr_group_filter = @instr_group_filter," +
                                  "    doc_types_filter = @doc_types_filter," +
                                  "    pages_per_subfolder = @pages_per_subfolder";
            SqlCommand com = new SqlCommand(sqlUpdate, con);

            try
            {
                con.Open();
                // Replace the parameters with what is typed in the textboxes
                com.Parameters.AddWithValue("@instr_group_filter", txtInstrumentNoType.Text);
                com.Parameters.AddWithValue("@doc_types_filter", txtDocType.Text);
                com.Parameters.AddWithValue("@pages_per_subfolder", txtPageThreshhold.Text);
                com.ExecuteNonQuery();
            }
            finally
            {
                con.Close();
            }

            this.Close();
        }

1 个答案:

答案 0 :(得分:0)

您应该使用ShowDialog来显示Form2。如果DialogResult正常,则重新加载配置。

private void btnConfigure_Click(object sender, EventArgs e)
{
    // Open the Form2
    Form2 configureForm = new Form2();
    if (configureForm.ShowDialog(this) == DialogResult.OK)
    {
        LoadConfig();
    }
}

在关闭Form2之前,应相应地设置DialogResult。

private void btnApply_Click(object sender, EventArgs e)
{
    // Update the configuation
    ExecuteSqlUpdate();
    DialogResult = DialogResult.OK;
    this.Close(); // Remove this line from your ExecuteSqlUpdate() method!
}

使用ShowDialog将使Form2充当模态。它将阻止Form1,直到Form2关闭。