C# 将多个数据和数据类型从子窗体传递到父窗体并保存到数据库
在我的MdiForm中,我有一个菜单栏,上面有btnSave。我想通过单击midForm菜单栏上的btnSave保存在我的子窗体中创建的活动数据。我使用以下类将数据保存到数据库: 学生俱乐部C# 将多个数据和数据类型从子窗体传递到父窗体并保存到数据库,c#,C#,在我的MdiForm中,我有一个菜单栏,上面有btnSave。我想通过单击midForm菜单栏上的btnSave保存在我的子窗体中创建的活动数据。我使用以下类将数据保存到数据库: 学生俱乐部 internal class StudentBal { public string DateAdded { get; set; } public string FirstName { get; set; } public string MiddleName { get; set; }
internal class StudentBal
{
public string DateAdded { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string CityAddress { get; set; }
public string HomeAddress { get; set; }
public string Nationality { get; set; }
public string MaritalStatus { get; set; }
public string DateOfBirth { get; set; }
public string PlaceOfBirth { get; set; }
public string TelNo { get; set; }
public string Father { get; set; }
public string Mother { get; set; }
public string ParentsAddress { get; set; }
public string EmployersName { get; set; }
public string EmplyerTelNo { get; set; }
public string GuardiansName { get; set; }
public string GuradiansAddress { get; set; }
public byte[] StudentImage { get; set; }
public string WorkAddress { get; set; }
public int InsertStudent(StudentBal bal)
{
var dal = new StudentDal();
return dal.InsertStudent(bal);
}
StudentDal.cs
public int InsertStudent(StudentBal bal)
{
const string query =
@"INSERT INTO students VALUES(@DateAdded, @FirstName, @MiddleName, @LastName, @CityAddress, @HomeAddress, @Nationality,
@MaritalStatus, @DateOfBirth, @PlaceOfBirth, @TelNo, @Father, @Mother,
@ParentsAddress, @EmployersName, @EmployersTelNo, @GuardiansName,
@GuardiansAddress, @StudentImage, @WorkAddress)";
using (_cmd = new SqlCommand(query, _cn))
{
_cmd.Parameters.AddWithValue("@DateAdded", Convert.ToDateTime(bal.DateAdded).ToShortDateString());
_cmd.Parameters.AddWithValue("@FirstName", bal.FirstName);
_cmd.Parameters.AddWithValue("@MiddleName", bal.MiddleName);
_cmd.Parameters.AddWithValue("@LastName", bal.LastName);
_cmd.Parameters.AddWithValue("@CityAddress", bal.CityAddress);
_cmd.Parameters.AddWithValue("@HomeAddress", bal.HomeAddress);
_cmd.Parameters.AddWithValue("@Nationality", bal.Nationality);
_cmd.Parameters.AddWithValue("@MaritalStatus", bal.MaritalStatus);
_cmd.Parameters.AddWithValue("@DateOfBirth", bal.DateOfBirth);
_cmd.Parameters.AddWithValue("@PlaceOfBirth", bal.PlaceOfBirth);
_cmd.Parameters.AddWithValue("@TelNo", bal.TelNo);
_cmd.Parameters.AddWithValue("@Father", bal.Father);
_cmd.Parameters.AddWithValue("@Mother", bal.Mother);
_cmd.Parameters.AddWithValue("@ParentsAddress", bal.ParentsAddress);
_cmd.Parameters.AddWithValue("@EmployersName", bal.EmployersName);
_cmd.Parameters.AddWithValue("@EmployersTelNo", bal.EmplyerTelNo);
_cmd.Parameters.AddWithValue("@GuardiansName", bal.GuardiansName);
_cmd.Parameters.AddWithValue("@GuardiansAddress", bal.GuradiansAddress);
_cmd.Parameters.AddWithValue("@StudentImage", bal.StudentImage);
_cmd.Parameters.AddWithValue("@WorkAddress", bal.WorkAddress);
_cn.Open();
return(_cmd.ExecuteNonQuery());
}
}
这是我的学生表格
private void btnSaveInformation_Click(object sender, EventArgs e)
{
var stream = new MemoryStream();
pictureBox2.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] pic = stream.ToArray();
if (!CheckTextBox()) return;
var bal = new StudentBal
{
CityAddress = string.IsNullOrWhiteSpace(txtCityAddress.Text) ? "N/A" : txtCityAddress.Text,
DateAdded = DateTime.Now.ToShortDateString(),
DateOfBirth = txtDateOfBirth.Text,
EmployersName = string.IsNullOrWhiteSpace(txtEmployersName.Text) ? "N/A" : txtEmployersName.Text,
EmplyerTelNo = string.IsNullOrWhiteSpace(txtEmpContactNumber.Text) ? "N/A" : txtEmpContactNumber.Text,
Father = string.IsNullOrWhiteSpace(txtFathersName.Text) ? "N/A" : txtFathersName.Text,
FirstName = txtFirstName.Text,
GuardiansName = string.IsNullOrWhiteSpace(txtGuardiansName.Text) ? "N/A" : txtGuardiansName.Text,
GuradiansAddress = string.IsNullOrWhiteSpace(txtGuardiansAddress.Text) ? "N/A" : txtGuardiansAddress.Text,
HomeAddress = txtHomeAddress.Text,
LastName = txtLastName.Text,
MaritalStatus = txtMaritalStatus.Text,
MiddleName = string.IsNullOrWhiteSpace(txtMiddleName.Text) ? "N/A" : txtMiddleName.Text,
Mother = txtMothersName.Text,
Nationality = txtNationality.Text,
ParentsAddress = txtParentsAddress.Text,
PlaceOfBirth = txtPlaceOfBirth.Text,
TelNo = string.IsNullOrWhiteSpace(txtTelNo.Text) ? "N/A" : txtTelNo.Text,
StudentImage = pic,
WorkAddress = string.IsNullOrWhiteSpace(txtWorkAddress.Text) ? "N/A" : txtWorkAddress.Text,
};
var result = bal.InsertStudent(bal);
if (result > 0)
{
MessageBox.Show(@"Data successfully added.");
}
var obj = (MdiForm)Application.OpenForms["MdiForm"];
if (obj != null) obj.FillComboBox();
}
我需要将所有信息从我的子窗体(AddStudent)传递到父窗体(MdiFOrm),这样我可以通过单击菜单栏中的btnSave保存所有详细信息。我尝试创建一个可以在父窗体中调用的公共方法(SaveDetails()),如下所示:
AddStudent add = new AddStudent();
add.SaveDetails();
但是执行上述代码将创建一个新实例,并且不会保存具有要保存的值的活动子窗体。如果有一种方法可以调用活动子窗体中的方法而不实例化(var addStudent=new addStudent();),那就太好了。
在这种情况下,将该方法公开为静态将不起作用
感谢您的帮助。这是执行回调的抽象示例:
public class Parent
{
public void CreateChild()
{
Child childNew = new Child(this); //here you give over the parents reverence
}
public void SaveStuff(int number)
{
//here you can save the number
}
}
class Child
{
private Parent parent;
public Child(Parent parent)
{
this.parent = parent;
}
public void PressOkButton()
{
this.parent.SaveStuff(4); //here you are doing the callback
}
}
但是你可以把父母交给承包商的孩子,然后打电话给他你是什么意思?请详细解释或举例说明。在您的孩子体内,您添加了一个来自家长类型的membervariable。然后你向你的孩子表达你父母的敬意…你只需要做一次,所以在构造函数中这样做是有意义的。您还需要在父级中使用一个公共方法(回调方法),用于传递要保存的信息。孩子现在可以通过父级的membervariable调用该方法了……或者我不明白这个问题吗?旁注:在将insert写入语句时,始终指定列名。否则,一旦添加列,应用程序将崩溃。谢谢。现在如何将多个值传递到SaveStuff中?如果您在StudentBal的属性中看到,除了字符串和int之外,我还有一个字节“Byte[]StudentImage{get;set;}数组。在您的示例中,它只有一个数字,我已经让它工作了。当我要传递多个数据时,它就是这个。数组?您可以用“StudentBal;”替换“int number”如果孩子尊敬父母,那么你可以用(parent.InsertStudent())调用InsertStudent方法哦!我明白了!谢谢