Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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# 从多个文本框、datetimepicker和combobox向datagridview其他表单c添加一行#_C#_Winforms_Datagridview - Fatal编程技术网

C# 从多个文本框、datetimepicker和combobox向datagridview其他表单c添加一行#

C# 从多个文本框、datetimepicker和combobox向datagridview其他表单c添加一行#,c#,winforms,datagridview,C#,Winforms,Datagridview,我想将多个文本框中的一行、一个日期时间选择器和一个组合框(form2)添加到datagridview(form1)。如果我想把这行加起来,它就加不起来了。我真正想要的是一个集成的autosave/autoload,我想要创建一个只有列的空白datagridview,这样用户就可以手动添加数据行。 我会再解释一下我在这里建造的东西;Form1:将有一个datagridview(用于存储一些用户添加的数据)、3个文本框(textbox1=列[5]的总量、textbox2=列[5]的总量,其中列[6]

我想将多个文本框中的一行、一个日期时间选择器和一个组合框(form2)添加到datagridview(form1)。如果我想把这行加起来,它就加不起来了。我真正想要的是一个集成的autosave/autoload,我想要创建一个只有列的空白datagridview,这样用户就可以手动添加数据行。 我会再解释一下我在这里建造的东西;Form1:将有一个datagridview(用于存储一些用户添加的数据)、3个文本框(textbox1=列[5]的总量、textbox2=列[5]的总量,其中列[6]为“Nee”,textbox3=textbox1-textbox2)和打开form2的按钮;Form2:将有1个datetimepicker、5个文本框、1个combobox和一个按钮,其中将添加datetimepicker、5个文本框和combobox作为datagridview中的新行。 我还希望在关闭和打开程序时自动保存和加载数据。到目前为止,我得到的是:

节目:

using System;
using System.Windows.Forms;

namespace Javell_Administratie_Software
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run (new Overzicht());
        }
    }
} 
表格2:

using System;
using System.Windows.Forms;

namespace Javell_Administratie_Software
{

    public partial class Toevoegen : Form
    {

        public Toevoegen()
        {
            InitializeComponent();
        }       

        public void Toevoegen2_Click(object sender, EventArgs e)
        {
            Overzicht oz = new Overzicht();
            oz.AddDataTableRow();            
            oz.Overzicht1.DataSource = oz.dt;
            oz.Overzicht1.Update();
            this.Close();
        }
    }
}

必须将公共参数添加到form2中

 using System;
    using System.Windows.Forms;

    namespace Javell_Administratie_Software
    {

        public partial class Toevoegen : Form
        {

            public Toevoegen()
            {
                InitializeComponent();
            }       
            public object Row{get;set;}
            public void Toevoegen2_Click(object sender, EventArgs e)
            {
                Row=  new object[]{
                tv.dateTimePicker1.Value, tv.textBox1.Text,
                tv.textBox2.Text, tv.textBox3.Text, tv.textBox4.Text,    
                tv.textBox5.Text, tv.comboBox1.Text
                };
            this.Close();
            }
        }
    }
编辑表格1

     public void AddDataTableRow(Object row)
            {

                dt.Rows.Add(row);        

            }

            public void Toevoegen1_Click(object sender, EventArgs e)
            {
                Toevoegen tv = new Toevoegen();
                tv.ShowDialog();
                AddDataTableRow(tv.Row);
            }

必须将公共参数添加到form2中

 using System;
    using System.Windows.Forms;

    namespace Javell_Administratie_Software
    {

        public partial class Toevoegen : Form
        {

            public Toevoegen()
            {
                InitializeComponent();
            }       
            public object Row{get;set;}
            public void Toevoegen2_Click(object sender, EventArgs e)
            {
                Row=  new object[]{
                tv.dateTimePicker1.Value, tv.textBox1.Text,
                tv.textBox2.Text, tv.textBox3.Text, tv.textBox4.Text,    
                tv.textBox5.Text, tv.comboBox1.Text
                };
            this.Close();
            }
        }
    }
编辑表格1

     public void AddDataTableRow(Object row)
            {

                dt.Rows.Add(row);        

            }

            public void Toevoegen1_Click(object sender, EventArgs e)
            {
                Toevoegen tv = new Toevoegen();
                tv.ShowDialog();
                AddDataTableRow(tv.Row);
            }

好的,这就是我解决你问题的方法。然而,它可能需要大量的代码返工

  • 对于自动保存/自动加载,您需要创建窗口关闭事件来调用对象上的序列化命令。然后,在主窗口开始初始化时,需要尝试对序列化到的文件进行反序列化。向下滚动到answers部分,查看实现方法调用的几种方法,这些方法调用涉及如何序列化和反序列化

  • 这与1相配合,您确实希望创建一个类,该类表示进入数据表的数据,该数据表将具有与文本框和datatimepicker等相对应的属性。Form2将具有一个属性,该属性通过使用这些UI控件的数据初始化该类来返回该类的对象。因此,在从form1调用form2之后,可以执行form2.GetMyObject(无论您如何命名返回对象的属性),并使用WhateYourCollectionis.add(form.GetMyObject)将其添加到集合中。你可能会问为什么要经历这些?原因是您可以创建一个列表或其他类型的集合,在其中添加类对象并将该集合绑定到datagridview的itemsSource。将UI逻辑与数据/业务逻辑分离是一种很好的做法。这对于最后一项很重要。这将使代码维护更容易,当您需要进行更改时,它将需要更少的代码;不利的一面是在一开始就实现它,可能需要做更多的工作

  • 最后,您将需要一个eventhandler,一旦将一个项添加到集合/数据表中,它将需要更新总数和差值,并且在处理对象时,计算该值将比直接从datagridview解析数据更容易


  • 好的,这就是我解决你问题的方法。然而,它可能需要大量的代码返工

  • 对于自动保存/自动加载,您需要创建窗口关闭事件来调用对象上的序列化命令。然后,在主窗口开始初始化时,需要尝试对序列化到的文件进行反序列化。向下滚动到answers部分,查看实现方法调用的几种方法,这些方法调用涉及如何序列化和反序列化

  • 这与1相配合,您确实希望创建一个类,该类表示进入数据表的数据,该数据表将具有与文本框和datatimepicker等相对应的属性。Form2将具有一个属性,该属性通过使用这些UI控件的数据初始化该类来返回该类的对象。因此,在从form1调用form2之后,可以执行form2.GetMyObject(无论您如何命名返回对象的属性),并使用WhateYourCollectionis.add(form.GetMyObject)将其添加到集合中。你可能会问为什么要经历这些?原因是您可以创建一个列表或其他类型的集合,在其中添加类对象并将该集合绑定到datagridview的itemsSource。将UI逻辑与数据/业务逻辑分离是一种很好的做法。这对于最后一项很重要。这将使代码维护更容易,当您需要进行更改时,它将需要更少的代码;不利的一面是在一开始就实现它,可能需要做更多的工作

  • 最后,您将需要一个eventhandler,一旦将一个项添加到集合/数据表中,它将需要更新总数和差值,并且在处理对象时,计算该值将比直接从datagridview解析数据更容易


  • 如果我这样做,我会得到一个错误,即待添加的行比列数长如果我这样做,我会得到一个错误,即待添加的行比列数长X这给了我很多阅读、学习和尝试的机会:P我现在就给你解决的问题,因为这可能是wright的答案,我让你知道我什么时候让它工作!让您随时了解。@Javell只是一个注释,说明为什么直接向datagridview添加数据可能不是最好的方法,以及为什么开发类可能是最好的方法。如果您需要更新、编辑或使用数据,最好使用类。例如,假设您想要获取DateTimePicker信息,您现在访问它的方式是硬编码该信息所在的列和行,但假设您想要在datagridview中包含另一列,这将导致您现在需要更改逻辑,因为列可能会移动。你现在这样做是可能的,但会很难。这给了我很多阅读、学习和尝试的机会:P我现在就给你答案,因为这可能是赖特的答案,我得到答案后会告诉你