C#WinForm列表到数据库

时间:2017-03-01 16:58:00

标签: c# sql forms winforms list

下午全部,

我的任务是将用户填写的当前基于纸张的表单转换为Windows窗体c#应用程序中的电子表单,用户可以通过电子方式填写,然后单击按钮,数据库中的数据。

我已经完成了其他5个没有问题的表格,但是我刚刚达到的那个,我认为最简单的一个,让我感到难过。

这是纸张的样子以及它是如何填充的例子(它首先从excel打印出来):

Paper version of form

我的数据库包含以下表格:

User
   UserID
   UserName

EquipmentReturnSubmission
   UserID (from User table)
   ReturnID
   ReturnDate

 EquipmentReturnDetails
   ReturnID (from EquipmentReturnSubmission table)
   SerialNo
   Description

当数据被放入数据库时​​,上面表格中的每一行都会在EquipmentReturnDetails表中有一行,但所有行都有相同的ReturnID,因此可以将其链接以生成该用户提交的设备列表

困扰我的是如何在我的WinForms应用程序中执行此操作。我已经看过将数据从GridView插入到数据库中,但是一次只能找到如何执行这一行 - 我需要使用相同的ReturnID插入所有行,以便它可以链接。 / p>

我以为我可以做类似下面的事情,但不知道从哪里开始编码,即使这是最好的方法。

Attempt at form

我的想法是用户输入序列号和描述,然后点击添加,将详细信息放入listbox / gridview或某种保留区域,并清除文本框。然后,用户可以继续执行此操作,每次将详细信息添加到保留区域,然后提交按钮将其写入数据库。

同样,我不确定如何在每次单击“添加”按钮时创建参数的方法中完成此操作。

如果有人能指出我正确的方向那将是伟大的。我自学很高兴完全纠正。

提前致谢。

1 个答案:

答案 0 :(得分:0)

好吧,多亏了Zath的评论,我做了一些研究,并设法使用以下方法:

表:

User
    UserID
    UserName

 EquipmentReturnSubmission
    UserID //(from User table)
    ReturnID
    ReturnDate

EquipmentReturnDetails
    ReturnID //(from EquipmentReturnSubmission table)
    SerialNo
    Description

然后我在表单中添加了一个DataGridView,并添加了SerialNo和Description列。我的C#代码如下:

 private void Submit_Click(object sender, EventArgs e)
    {
        if (MessageBox.Show("Are you sure these details are correct?", "Are you sure?", MessageBoxButtons.YesNo) == DialogResult.Yes)
        {
                dataGridView1.AllowUserToAddRows = false; //Disables edit so the insert doesnt try and do an insert for the blank row created when the user clicks to add data.

                #region SQL Insert

                SqlConnection con = new SqlConnection(Home.ConString);
                SqlCommand cmd = new SqlCommand("EquipmentReturnSubmission1", con);
                cmd.CommandType = CommandType.StoredProcedure;
                #region Parameters

                cmd.Parameters.Add("@Name", SqlDbType.VarChar, 200).Value = OfficerName.Text;
                cmd.Parameters.Add("@Area", SqlDbType.VarChar, 200).Value = Area.Text;
                cmd.Parameters.Add("@SubmissionDate", SqlDbType.Date).Value = SubmissionDate.Value;
                cmd.Parameters.Add("@SubmissionID", SqlDbType.Int).Direction = ParameterDirection.Output;

                #endregion
                try
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (System.Exception ex1)
                {
                    throw new System.Exception("Error submitting equipment return sheet." + ex1.Message);
                }
                finally
                {
                    SubID = int.Parse(Convert.ToString(cmd.Parameters["@SubmissionID"].Value));
                    con.Close();
                    SecondInsert();
                }
                #endregion
            }
        }
    }


    private void SecondInsert()
    {
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {

            SqlConnection con = new SqlConnection(Home.ConString);
            {
                SqlCommand cmd = new SqlCommand("INSERT INTO EquipmentReturnSubmissionDetails (SubmissionID, SerialNumber, Description) VALUES (@SubmissionID, @SerialNumber, @Description)", con);
                cmd.CommandType = CommandType.Text;
                {
                    cmd.Parameters.AddWithValue("@SubmissionID", SqlDbType.Int).Value = SubID;
                    cmd.Parameters.AddWithValue("@SerialNumber", row.Cells["SerialNo"].Value);
                    cmd.Parameters.AddWithValue("@Description", row.Cells["Description"].Value);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }

        }
        MessageBox.Show("Data submitted.");
        this.Close();
    }

这完全符合我的要求并且很快就完成了。