从两个表单C#winform将数据插入SQL表
我正在尝试同时将从两个表单C#winform将数据插入SQL表,c#,sql,winforms,C#,Sql,Winforms,我正在尝试同时将frm1和frm2中的数据插入SQL Serverfrm1包含产品信息(条形码、数量、价格、增值税、总额等)和frm2(包含现金和零钱等付款信息)。其想法是,当用户单击btnfrm2时,来自frm1的数据应传递到frm2(但不显示),并且在frm2中,用户给出支付信息(现金和零钱)单击btnsave后,应将frm1和frm2中的数据插入数据库 我创建了一个类和一个方法来将数据传递给frm2 internal void mbushe(string[] args)
frm1
和frm2
中的数据插入SQL Serverfrm1
包含产品信息(条形码、数量、价格、增值税、总额等)和frm2
(包含现金和零钱等付款信息)。其想法是,当用户单击btnfrm2
时,来自frm1
的数据应传递到frm2
(但不显示),并且在frm2
中,用户给出支付信息(现金和零钱)单击btnsave
后,应将frm1
和frm2
中的数据插入数据库
我创建了一个类和一个方法来将数据传递给frm2
internal void mbushe(string[] args)
{
for (int i = 0; i < dataTable.Rows.Count; i++)
{
arka_data ad = new arka_data();
ad.NR = int.Parse(txtnrfatures.Text);
ad.VLERATVSHTOTAL = float.Parse(textBox1.Text);
ad.BARKODI = int.Parse(dataTable.Rows[i][0].ToString());
ad.EMERTIMI = dataTable.Rows[i][1].ToString();
ad.SASIA = int.Parse(dataTable.Rows[i][2].ToString());
ad.CMIMI = int.Parse(dataTable.Rows[i][3].ToString());
ad.TVSH = int.Parse(dataTable.Rows[i][4].ToString());
ad.NENTOTALI = float.Parse(txttotali.Text);
ad.ZBRITJA = float.Parse(txtzbritja.Text);
ad.TOTALI = float.Parse(totali.Text);
ad.KOHA = DateTime.Now;
ad.KASIERI = lbluser.Text;
ad.KLIENTI = cmbklienti.Text;
ad.VLERAETVSH = float.Parse(dataTable.Rows[i][7].ToString());
ad.VLERAPATVSH = float.Parse(dataTable.Rows[i][6].ToString());
ad.NRATIKUJVE = int.Parse(lblnumri.Text);
ad.TOTALIPCS = float.Parse(dataTable.Rows[i][5].ToString());
}
}
public class arka_data
{
public int NR { get; set; }
public int BARKODI { get; set; }
public string EMERTIMI { get; set; }
public int SASIA { get; set; }
public float CMIMI { get; set; }
public float TVSH { get; set; }
public float TOTAL { get; set; }
public float NENTOTALI { get; set; }
public float ZBRITJA { get; set; }
public float TOTALI { get; set; }
public DateTime KOHA { get; set; }
public string KASIERI { get; set; }
public string KLIENTI { get; set; }
public float VLERAETVSH { get; set; }
public float VLERAPATVSH { get; set; }
public int NRATIKUJVE { get; set; }
public float TOTALIPCS { get; set; }
public float VLERATVSHTOTAL { get; set; }
}
虽然mbushe是来自第一个表单的方法,但如果您的表单使用MVP模式,则最好使用它,也就是从接口继承。范例
cmd.Parameters.Add(new SqlParameter("@nrfatures", mbushe.NR);
cmd.Parameters.Add(new SqlParameter("@klienti", mbushe.Barkodi)); etc
public class MyForm1 : Form, IView1
{
public string SomeData { get { return MyControl1.Text } }
. . . .
}
public class MyForm2 : Form, IView2
{
public string SomeOtherData { get { return MyControl1.Text } }
. . . .
}
然后创建persister,它从表单和保存中收集数据
公共类FormDataPersister
{
私人IView1_v1;
私人IView2_v2;
公共类FormDataPersister(IView1 form1Data、IView2 form2Data)
{
_v1=格式1数据;
_v2=Form2数据;
}
公共作废保存()
{
//此处将数据收集到参数中并保存
//范例
. . . . .
cmd.Parameters.Add(新的SqlParameter(@klienti,_v1.Barkodi));
cmd.ExecuteNonQuery();
}
}
我建议您从UI上的数据构建一个对象,然后
btnsave
按钮时,您只需调用一个保存该对象的代码
通过这种方式,您可以将表单、表单数据和数据库交互逻辑彼此分离。#2将引入状态控制的需求。如果窗体已关闭并重新启动,而保存的对象仍有旧的窗体数据,该怎么办#1将介绍对数据完整性控制的需求。如果您尚未收集1个或两个表单数据并按下“保存”按钮,该怎么办?您可以将其设置为任意复杂。在没有数据的情况下单击“保存”是视图级别的问题。国际海事组织的问题都是关于控制国家。关键在于将数据、视图和处理解耦logic@NorbertHüthmayr任何简短的例子都会有帮助,因为我是新手programming@LeonardGashi一个完整的例子可能太多了,但我发现了一个有趣的链接,可以帮助您理解这个概念。找不到类型或命名空间名称“Iview1”(是否缺少using指令或程序集引用?@T.S要如何引用它useful@LeonardGashi
IView1
和IView2
应该是您需要声明的接口。这些接口应该包含保存在数据库中的属性。这是MVP或模型视图演示者模式。请参见此处,表单成为视图模型,您可以轻松获取所需的值,因为它们将映射到表单上的控件值