将所有数据从一个用户控件复制到另一个相同类型的用户控件

时间:2013-04-10 10:15:42

标签: c# winforms user-controls

我想使用checkBox SameAsPrevious

将所有数据从HomeAddressUC传输到PermanentAddressUC

每个UserControl都具有相同的Type(AddressUserControl)

enter image description here

填充HomeAddressUC的DataSource代码是这样的

private void SetTabPageDetails(string tabPageName, CustomerDetails customerDetailsCache)
{
     customerDetailsCache = // calling stored procedure
     PermanentAddressUC.SetDetails(customerDetailsCache.Addresses[0]);
}

该DataSource的范围仅限于方法SetTabPageDetails() 我试图实现的逻辑是复选框更改事件是

if (chkSameAsPervious.Checked)
{
    foreach (var addressCtl in from Control ctl in this.ADDRESS_TAB.Controls select ctl as BankSys24.UI.UserControls.AddressUserControl)
    {
        if (addressCtl.GroupBoxText == "Mailing Address")
        {
            // want to do something here
        }
    }
}

我尝试按照相关链接

Best practice when you need two user controls (winforms) to communicate

它说使用第三个通用用户控件容器或接口

最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

如果所有字段相同,为什么您需要为家庭和邮寄地址设置不同的用户控件?

您可以为两者使用一个用户控件并创建属性以将组名称设置为“家庭住址”或“邮寄地址”

通过读取表单的字段,可以通过传递地址对象和获取地址对象来设置两个公共方法来设置地址字段。

在复选框的检查更改事件中,您可以通过调用家庭地址用户控制即时获取地址方法获取地址对象,然后您可以通过传递地址对象通过调用set address方法设置邮件地址用户控制的详细信息。

希望这会有所帮助

答案 1 :(得分:0)

好的,求助于帮助

我发现可能的最短解决方案是这样的:

if (chkSameAsPervious.Checked)
            {
                    MailingAddressUC.SetDetails(PermanentAddressUC.GetDetails() as BankSys24.DTO.Customer.Address);
            }

其中

 public object GetDetails()
        {
            return new BankSys24.DTO.Customer.Address { //data };
        }

  public void SetDetails(object input)
        {
           //intermediate Object
            if (details != null)
            {
//Mapping

}

Getdetails将所有数据映射为Container Class Object,可以直接传递给SetDetails()......

由于