1

我创建了 2 个表单,Form1 带有面板,Form2 带有面板。在 Form2 上,我想设计控件,然后在 Form1 中动态加载这些控件。我的想法是我可以使用 VS 设计任意数量的表单,然后使用表单内的这些面板动态加载到 Form1 中。

麻烦的是,form2 使用 Dataset + Databind,然后在加载到 Form1 时停止工作。

我在Form1中尝试过的方法:

        From2 from2 = new Form2();

        for (int i = 0; i < cf.Form2.Controls.Count; i++)
        {
            panel1.Controls.Add(cf.Form2.Controls[i]);
        }
4

3 回答 3

2

这是假设我准确地阅读了你的意思

正如您所发现的那样,这种方法是不可行的。

更好的方法是创建一个包含面板的用户控件。在您的用户控件中,您可以公开一个名为 DataBind() 的公共方法,该方法将数据源作为输入参数,并在该方法中绑定数据。

动态加载用户控件比动态加载表单更容易。

在用户控件中,您只需添加一个这样的方法。(根据需要进行修改以满足您的需要)

public void BindData(System.Data.DataTable t)
{
   GridView1.DataSource = t;
   if(t.Rows.Count > 0)
   {
      FirstNameTextBox.Text = Convert.ToString(t.Rows[0]["FirstName"])
   }
}

在您的表单中,您可以这样称呼它(当然,应该有错误处理等 - 这是一个关于如何做我所描述的事情的简单示例。)

System.Data.DataTable t = new System.Data.DataTable;
System.Data.SqlClient.SqlDataAdapter ad = new System.Data.DataAdapter(sql, connectionstring);
ad.Fill(t);

MyUserControl myControl= new MyUserControl();
myControl.BindData(t);
于 2012-10-02T13:05:10.110 回答
0

正如其他答案所述,您需要使用的解决方案是为这些类型的情况创建用户控件。您尝试做的事情不起作用的原因是控件专门设计为只能在单个表单上工作。如果您尝试将控件添加到多个表单,它将只能成功添加到一个。对于 UserControls 来说也是如此。你不会能够只制作一个用户控件,然后将其添加到两个表单中。用户控件的优点是您可以将用于创建、初始化和使用某些功能部分的所有代码放置在与表单不同的位置。您将希望创建两个单独的用户控件实例,您添加两个单独的表单。优点只是用于创建面板的代码,以及其中包含或处理它的所有内容,都可以重复使用。

于 2012-10-02T13:51:56.283 回答
0

我不确定我是否 100% 理解你的意思,如果我错了,请纠正我。您想从各种表单加载子项并在 form1 上动态显示它们吗?我不确定你为什么要这样做。

为什么不使用用户控件,您可以根据需要制作不同的用户控件,并根据需要将这些控件加载到您的 form1 中。

如果您不确定如何执行此操作,请右键单击您的项目>添加新项目>用户控件并进行操作。

于 2012-10-02T13:10:01.780 回答