Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从两个表单C#winform将数据插入SQL表_C#_Sql_Winforms - Fatal编程技术网

从两个表单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 Server
frm1
包含产品信息(条形码、数量、价格、增值税、总额等)和
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上的数据构建一个对象,然后

  • 传递它(从一张表格到另一张表格),同时填充越来越多的信息或
  • 将其存储在某种类型的存储库中,以便代码库的每个部分都可以访问(首选)
  • 当用户单击Form2上的
    btnsave
    按钮时,您只需调用一个保存该对象的代码


    通过这种方式,您可以将表单、表单数据和数据库交互逻辑彼此分离。

    #2将引入状态控制的需求。如果窗体已关闭并重新启动,而保存的对象仍有旧的窗体数据,该怎么办#1将介绍对数据完整性控制的需求。如果您尚未收集1个或两个表单数据并按下“保存”按钮,该怎么办?您可以将其设置为任意复杂。在没有数据的情况下单击“保存”是视图级别的问题。国际海事组织的问题都是关于控制国家。关键在于将数据、视图和处理解耦logic@NorbertHüthmayr任何简短的例子都会有帮助,因为我是新手programming@LeonardGashi一个完整的例子可能太多了,但我发现了一个有趣的链接,可以帮助您理解这个概念。找不到类型或命名空间名称“Iview1”(是否缺少using指令或程序集引用?@T.S要如何引用它useful@LeonardGashi
    IView1
    IView2
    应该是您需要声明的接口。这些接口应该包含保存在数据库中的属性。这是MVP或模型视图演示者模式。请参见此处,表单成为视图模型,您可以轻松获取所需的值,因为它们将映射到表单上的控件值