从两个窗体c#winform将数据插入sql表

flvtvl50  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(262)

我正在尝试从中插入数据 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; }

    }

在第二种形式中,我将使用方法的元素(来自第一种形式)

cmd.Parameters.Add(new SqlParameter("@nrfatures", mbushe.NR);

         cmd.Parameters.Add(new SqlParameter("@klienti", mbushe.Barkodi)); etc

而她是第一种形式的方法

9cbw7uwe

9cbw7uwe1#

如果窗体使用mvp模式,也就是从接口继承,那么这是最好的选择。例子

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,它从两个窗体收集数据并保存

public class FormDataPersister
{

    private IView1 _v1;
    private IView2 _v2;

    public class FormDataPersister(IView1 form1Data, IView2 form2Data)
    {
        _v1 = form1Data;
        _v2 = form2Data;        
    }

    public void Save()
    {

        // HERE collect your data into parameters and SAVE
        // EXAMPLE
         . .  . . . 
        cmd.Parameters.Add(new SqlParameter("@klienti", _v1.Barkodi));
        cmd.ExecuteNonQuery();
    }
}
vcudknz3

vcudknz32#

我建议您从ui上的数据构建一个对象,然后
传递它(从一张表格到另一张表格),同时填充越来越多的信息或信息
将其存储在某种存储库中,以便代码库的每个部分都可以访问(首选)
当用户单击 btnsave 按钮,您只需调用持久化该对象的代码。
通过这种方式,您可以使窗体、窗体的数据和数据库交互逻辑彼此分离。

相关问题