Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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# 在c中将现有数据集调用到winform中#_C#_Winforms_Dataset - Fatal编程技术网

C# 在c中将现有数据集调用到winform中#

C# 在c中将现有数据集调用到winform中#,c#,winforms,dataset,C#,Winforms,Dataset,这有点奇怪,因为我知道如何修复代码中的问题,但它涉及到更改form.designer中的“请勿更改”代码 我有一个数据集,我想在表单外部创建 Jewels ds = new LoadDataTable().Load(); 然后,我使用表单设计器生成表单。设置所有数据后,该表为空 这是因为在form.designer中 this.jewels = new JewelsOfExile.Jewels(); 存在 如果我将此代码编辑为 这个。珠宝=ds 它修复了它并使用了我现有的数据集。太好了 但这

这有点奇怪,因为我知道如何修复代码中的问题,但它涉及到更改form.designer中的“请勿更改”代码

我有一个数据集,我想在表单外部创建

Jewels ds = new LoadDataTable().Load();
然后,我使用表单设计器生成表单。设置所有数据后,该表为空

这是因为在form.designer中

this.jewels = new JewelsOfExile.Jewels();
存在

如果我将此代码编辑为 这个。珠宝=ds

它修复了它并使用了我现有的数据集。太好了

但这会让设计师大吃一惊,破坏工具。如果我对工具进行任何更改,它将恢复我的更改并生成新变量(1)

如何在不手动更改设计器的情况下加载数据集

下面是完整的代码片段

using System;
using System.Windows.Forms;
using JewelsOfExile.Tables;

namespace JewelsOfExile
{

static class Program
{        
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Jewels ds = new LoadDataTable().Load();
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1(ds));
    }
}
}

using System.Windows.Forms;

namespace JewelsOfExile
{
    public partial class Form1 : Form
    {
        public Form1(Jewels ds)
        {
            InitializeComponent(ds);
        }
    }
}

多亏了阿切尔

在表单中添加了一个onload事件,并删除了main中的创建

        private void Form1_Load(object sender, System.EventArgs e)
    {
        Jewels jewels = new LoadDataTable().Load();
        affixesBindingSource.DataSource = jewels;
    }

多亏了阿切尔

在表单中添加了一个onload事件,并删除了加载事件的main创建

    private void Form1_Load(object sender, System.EventArgs e)
{
    Jewels jewels = new LoadDataTable().Load();
    affixesBindingSource.DataSource = jewels;
}

为什么不干脆把
Jewels ds=new-LoadDataTable().Load()放进去呢InitializeComponent()
中的code>(或者在表单加载事件中,就像它应该是的那样)?您是否使其变得比需要的复杂得多?好的-在设计器中打开表单(可视化,而不是代码),然后单击它,以便在“属性”窗口中选择表单本身。在该窗口的顶部有一个按钮,看起来像一个闪电-单击该按钮。然后向下查看列表并找到“加载”。双击该列旁边的右列,将为load事件创建一个空事件处理程序,并在代码中显示它。将用于加载数据集的所有代码都放在该函数中。它将在加载表单时执行。然后删除之前添加的所有其他数据加载代码。否-如果它有效,则它将显示在您正在显示的任何内容中。这里有太多的未知数,我无法有效地提供帮助,但您最好删除以前加载数据时使用的所有代码(在Main和InitializeComponent中),并让它在表单加载事件处理程序中工作。没有理由认为它在那里不起作用,所以是其他原因造成了问题。完成所有这些之后,在加载数据的行上放置一个断点,运行应用程序并检查它是否正确加载。在这种情况下,绑定就是问题所在。你应该可以直接说
dataGridView1.DataSource={a related data source}
,然后它就可以工作了。试着养成习惯,缩小代码片段的实际职责范围。例如,
Main()。如果Form1(或其名称)需要创建另一个同样需要数据集的表单,那么您可以始终向另一个表单添加构造函数,该表单将数据集作为参数,就像您最初使用主表单时一样。很多好的编程都是处理看似不重要的事情,但经过一定的时间,这些事情就会变得清晰而有价值。
    private void Form1_Load(object sender, System.EventArgs e)
{
    Jewels jewels = new LoadDataTable().Load();
    affixesBindingSource.DataSource = jewels;
}